私有继承与公有继承有什么区别?如果将上一篇共有继承中源代码中类B继承类A的方式改成私有继承(private),其他部分代码保持不变,编译代码,会出现一下错误信息:

从编译器指出的错误信息可以看出,父类A中的所有成员在子类对象B中都是不可见的。但是父类中的公有成员在私有继承的子类B中是可见的,可以被访问,但是其属性在子类发生降级。父类A中的public和protected属性的成员在子类中虽然能被访问,但是其属性在子类中被降级为private,所有子类成员是无法访问父类成员的,因为对于子类对象来说,父类的成员全部都是private,都是不可见的。要想正确输出,可用一下代码实现:

#include <iostream>
using namespace std;class A
{
private:int a;
protected:int b;
public:int c;void show(){cout << "a = " << a << "b = " << b << "c = " << c <<endl;}int set(int a,int b,int c){this->a = a;this->b = b;this->c = c;}int get_a(){return a;}int get_b(){ return b; }
};class B : private A
{
private:int x;
protected:int y;
public:int z;void show(){cout << "a = " << get_a() << "," << "b = " << b << "," << "c = " << c << "," << "x = " << x << "," << "y = " << y << "," << "z = " << z <<endl;}int set(int a,int b,int c,int x,int y,int z){A::set(a,b,c);this->x = x;this->y = y;this->z = z;}int get_a(){ return A::get_a();}int get_b(){ return b;}int get_c(){ return c;}int get_x(){ return x;}int get_y(){return y;}
};int main()
{B b;b.set(10,20,30,40,50,60);b.show();cout << "a = " << b.get_a() <<endl;cout << "b = " << b.get_b() <<endl;cout << "c = " << b.get_c() <<endl;cout << "x = " << b.get_x() <<endl;cout << "y = " << b.get_y() <<endl;cout << "z = " << b.z <<endl;return 0;
}

运行结果如下:

关于私有继承的总结:父类公有成员和保护成员都作为子类的私有成员,并且不能被这个子类的对象所访问。如果子类再派生出一个孙子类的话,在孙子类是否能访问父类的成员呢?因为父类的成员在子类中只有公有成员和保护成员可以访问,并且属性降级为private,所以孙子类即使是公有继承子类的,也不能访问private成员。所以在私有继承时,父类的成员只能由直接派生子类访问,而无法再往下继承。

C++三种继承方式--------私有继承(private)相关推荐

  1. 线程的三种创建方式以及代码实现

    线程和进程的概念 一个进程可以有多个线程 程序:是指令和数据的有序集合(静态的) 进程:是执行程序的一次执行过程(动态的),是系统资源分配的单位.在操作系统中运行的程序就是进程. 通常在一个进程中可以 ...

  2. 线程的三种创建方式和他们的优缺点

    文章目录 一.线程的三种创建方式 1.继承Thread 2.实现Runable接口 3.实现Callable接口 二.三种创建方式的优缺点 1.使用Runnable接口比使用继承Thread的优势 2 ...

  3. C++继承机制(一)——基本语法、三种继承方式、继承哪些数据

    目录: C++继承机制(一)--基本语法.三种继承方式.继承哪些数据 C++继承机制(二)--继承中的构造和析构顺序.继承同名成员的处理方式 C++继承机制(三)--多继承.菱形继承.虚继承原理 本篇 ...

  4. 你了解的继承方式html,法定继承、遗嘱继承、遗赠,这三种房产过户方式你了解多少?...

    在房产过户的中,与继承相关的方式有三种:法定继承.遗嘱继承和遗赠.这三种过户方式其实是有较大不同的,下面我们就来具体分析下,希望能对需要的朋友有帮助. 过户 在房产过户中,与继承相关的有三种,分别是法 ...

  5. Java基础——Java多继承的三种实现方式

    Java基础--Java"多继承"的三种实现方式 Java语言本身只支持单继承(每个类只能有一个父类),但单继承的局限性很大,因此,可以通过以下的方式实现"多继承&quo ...

  6. C++的三种访问权限的继承

    C++的三种访问权限的继承 开发工具与关键技术:C++.VisualStudio 作者:何任贤 撰写时间:2019年05月20日 三种访问权限继承指的是,继承过来的成员函数和成员变量还有析构函数的访问 ...

  7. C++_类和对象_C++继承_继承的方式_公共继承_保护继承_私有继承---C++语言工作笔记062

    然后我们再去看c++中的继承,现在我们来看,c++中继承的, 3种方式. 去看上面的图,可以看到,有公共继承,有保护继承,有私有继承.3种方式. 我们去写代码去看看.首先,我们写个Base1类, 然后 ...

  8. c/c++入门教程 - 2.4.6 继承、公共继承、保护继承、私有继承、virtual虚继承(概念、语法、方式、构造和析构顺序、同名成员处理、继承同名静态成员处理、多继承语法、菱形继承、钻石继承)

    目录 4.6 继承 4.6.1 继承的基本语法 4.6.2 继承方式 4.6.3 继承中的对象模型 4.6.4 继承中构造和析构顺序 4.6.5 继承同名成员处理方式 4.6.6 继承同名静态成员处理 ...

  9. mysql几种安装方法_mysql的三种安装方式(详细)

    安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mys ...

  10. Java多线程的三种实现方式(重点看Collable接口实现方式)

    1.通过继承Thread类来实现多线程 在继承Thread类之后,一定要重写类的run方法,在run方法中的就是线程执行体,在run方法中,直接使用this可以获取当前线程,直接调用getName() ...

最新文章

  1. 各类Transformer都得稍逊一筹,LV-ViT:探索多个用于提升ViT性能的高效Trick
  2. Vim清除最后一个搜索突出显示
  3. 148. Sort List
  4. ssh 用密码连接不上、查看openSSH 的版本、CentOS - 升级openSSH,修复安全漏洞
  5. eclipse忘记了程序保存在哪里怎么办
  6. python中一些特殊方法的作用
  7. layui弹出层使用(layer.alert / layer.open / layer.prompt )
  8. What is AJAX?(转)(二)
  9. chromium关闭更新_你的Win10系统20H2了吗此乃Win10年度最靠谱的更新还有Win10优化大师助阵...
  10. 基于任务的异步模式(TAP)
  11. python 文本处理 保留中英文和标点符号_问一下处理英文文本
  12. 周鸿祎——互联网业界的“搅局者”
  13. 量子统计中的涨落和时间关联函数的概念(谐振子例子)
  14. 电影在计算机中用什么形式保存,教你如何将 DVD 电影永久保存到电脑里
  15. 数据库的概念设计与逻辑设计
  16. MySQL数据库设计规范
  17. Java中调用ImageJ,与直接使用ImageJ软件处理所得图片黑白颠倒的问题
  18. scroll-top 设置微信小程序滚动条位置
  19. 芯片失效分析常见的分析方法有哪些
  20. 《Java EE企业级应用开发教程(SSM)》练习题答案---第五章Spring的事务管理(仅供参考)

热门文章

  1. 一个amp;quot;现象级amp;quot;大数据公司的蜕变
  2. CMake 编译时出现错误 coffe转换到 COFF 期间失败: 文件无效或损坏
  3. 计算机专业为职业环境分析,2021年计算机职业环境分析报告|计算机职业环境分析-得范文网...
  4. ln软链接调试mininet
  5. LOJ-10105(欧拉回路模板,套圈法,递归)
  6. Codeforces 227E/226C Anniversary 斐波那契数列性质+矩阵快速幂
  7. linux远程登录命令
  8. pandas常用数据处理函数整理
  9. 模拟题 czy的后宫
  10. CSS边框图片border-image属性