文章目录

  • 1 C++中不同的继承方式
    • 1.1 继承中被忽视的细节
    • 1.2 不同的继承方式
    • 1.3 继承中只选择public继承

1 C++中不同的继承方式

1.1 继承中被忽视的细节

如下:

1.2 不同的继承方式

C++中支持三种不同的继承方式:

  • public继承:父类成员在子类中保持原有访问级别。
  • private继承:父类成员在子类中变为私有成员。
  • protected继承:父类中的公有成员变为保护成员,其它成员保持不变。

继承与访问级别深度实践:

#include <iostream>
#include <string>using namespace std;class Parent
{protected:int m_a;
protected:int m_b;
public:int m_c;void set(int a, int b, int c){m_a = a;m_b = b;m_c = c;}
};class Child_A : public Parent
{public:void print(){cout << "m_a" << m_a << endl;cout << "m_b" << m_b << endl;cout << "m_c" << m_c << endl;}
};class Child_B : protected Parent
{public:void print(){cout << "m_a" << m_a << endl;cout << "m_b" << m_b << endl;cout << "m_c" << m_c << endl;}
};class Child_C : private Parent
{public:void print(){cout << "m_a" << m_a << endl;cout << "m_b" << m_b << endl;cout << "m_c" << m_c << endl;}
};int main()
{   Child_A a;Child_B b;Child_C c;a.m_c = 100;// b.m_c = 100;    // Child_B 保护继承自 Parent, 所以所有的 public 成员全部变成了 protected 成员, 因此外界无法访问// c.m_c = 100;    // Child_C 私有继承自 Parent, 所以所有的成员全部变成了 private 成员, 因此外界无法访问a.set(1, 1, 1);// b.set(2, 2, 2);// c.set(3, 3, 3);a.print();b.print();c.print();return 0;
}

关于继承的不同方式,如下内容特别需要注意:

  • 无论通过什么方式(public、protected、private)继承,在子类内部均可访问父类中的public、protected成员,private成员不可访问(如果想要子类能够访问,就定义为protected)。
  • 继承方式只影响外界通过子类对父类成员的访问权限。
    • public继承,父类成员的访问权限全部保留至子类;
    • protected继承,父类public成员的访问权限在子类中降至protected;
    • private继承,父类public、protected成员的访问权限在子类中均降至private。

1.3 继承中只选择public继承

关于继承方式:

  • 一般而言,C++工程项目中只使用public继承。
  • C++的派生语言只支持一种继承方式(public继承)。
  • protected和private继承带来的复杂性远大于实用性。

参考资料:

  1. C++深度解析教程

C++中不同的继承方式相关推荐

  1. 【C++深度剖析教程24】C++中不同的继承方式

    过完年了,今天开始写博客记录学习的过程.继续C++的学习,今天我们来看C++中不同的继承方式. 一.初探继承的方式 从上图看,是否可以将继承中的public换成protected或者private.如 ...

  2. JavaScript中6种继承方式总结

  3. C++中的struct与class继承方式

    代码: 1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 //class A{ 7 ...

  4. jQuery-源码阅读,JavaScript原生继承方式与jQuery中的继承

    JavaScript中继承方法有以下几种: 1.原型链继承: function Book (name,author){this.name=name;this.author=author;}Book.p ...

  5. Js理解之路:Js常见的6中继承方式

    目录 一.JS 实现继承的几种方式 第一种:原型链继承 二.构造函数继承(借助call方法) 三.组合继承(原型链继承+构造函数继承) 第四种:原型式继承(借助Object.create) 第五种:寄 ...

  6. 前端进击的巨人(七):走进面向对象,原型与原型链,继承方式

    "面向对象" 是以 "对象" 为中心的编程思想,它的思维方式是构造. "面向对象" 编程的三大特点:"封装.继承.多态" ...

  7. 探究JS常见的6种继承方式

    先看以下百科对(面向对象的继承)的解释! 通过以上精炼实用的解释,我们可以了解到继承的基本作用和功能!即可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法等. 广告:帮忙点击>> ...

  8. php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念 js里常用的如下 - phpStudy...

    JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...

  9. javascript中的继承方式

    javascript中的继承方式有好几种. 下面分别举例供大家参考学习: 1.function parent() { this.x=1; } function child() { var instan ...

最新文章

  1. 子div超出父div_菜鸟学 react props 子到父
  2. Ubuntu18.04中pyhton默认版本从2.7换为3.x
  3. 谈谈让你纠结的年终奖
  4. iot架构 mqtt netty_Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上
  5. Android --- 修改百度地图的显示范围的大小
  6. java word添加图片_Java 替换word文档文字并指定位置插入图片
  7. js 设备条形码字体_蚌埠食品袋激光打码机设备-青岛博泰格睿特
  8. 安装 ibm-java-x86_64-sdk-6.0-9.3.x86_64.rpm 的三步骤
  9. vector-空间增长
  10. 敏捷个人第六次练习讨论:个人价值观练习
  11. Oracle修改字段的顺序
  12. Linux运行jnetpcap程序(含配置步骤)
  13. 利用GDB调试 MSQL
  14. deeplab v3+---Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
  15. Linux keypad 设备树,beaglebone black通过devicetree配置矩阵键盘matrix-keypad
  16. 杜红超、彭志红担任BCF理事
  17. ajax异步提示对号,jQuery Ajax显示对号和错号用于验证输入验证码是否正确
  18. 一个利用html5的图片裁剪功能(已解决ios压扁缩放等bug)
  19. 项目管理之项目成本管理
  20. 齐次坐标(Homogeneous Coordinate)的理解

热门文章

  1. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-目录
  2. PyTorch 实现经典模型1:LeNet5
  3. STM32 基础系列教程 45 - FSMC_LCD_Touch
  4. 生成release版本的Android系统
  5. 通过FPGA将图片信息通过RS232串口发送到PC端,使用MATLAB进行图片显示
  6. 在Windows下使用gcc
  7. awk之特征相同行的合并 ~转
  8. 用vue+webpack搭建的前端项目结构
  9. CodeForces 340C
  10. lvm快照的创建恢复