C++中不同的继承方式
文章目录
- 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继承带来的复杂性远大于实用性。
参考资料:
- C++深度解析教程
C++中不同的继承方式相关推荐
- 【C++深度剖析教程24】C++中不同的继承方式
过完年了,今天开始写博客记录学习的过程.继续C++的学习,今天我们来看C++中不同的继承方式. 一.初探继承的方式 从上图看,是否可以将继承中的public换成protected或者private.如 ...
- JavaScript中6种继承方式总结
- C++中的struct与class继承方式
代码: 1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 //class A{ 7 ...
- jQuery-源码阅读,JavaScript原生继承方式与jQuery中的继承
JavaScript中继承方法有以下几种: 1.原型链继承: function Book (name,author){this.name=name;this.author=author;}Book.p ...
- Js理解之路:Js常见的6中继承方式
目录 一.JS 实现继承的几种方式 第一种:原型链继承 二.构造函数继承(借助call方法) 三.组合继承(原型链继承+构造函数继承) 第四种:原型式继承(借助Object.create) 第五种:寄 ...
- 前端进击的巨人(七):走进面向对象,原型与原型链,继承方式
"面向对象" 是以 "对象" 为中心的编程思想,它的思维方式是构造. "面向对象" 编程的三大特点:"封装.继承.多态" ...
- 探究JS常见的6种继承方式
先看以下百科对(面向对象的继承)的解释! 通过以上精炼实用的解释,我们可以了解到继承的基本作用和功能!即可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法等. 广告:帮忙点击>> ...
- php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念
js里常用的如下 - phpStudy...
JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...
- javascript中的继承方式
javascript中的继承方式有好几种. 下面分别举例供大家参考学习: 1.function parent() { this.x=1; } function child() { var instan ...
最新文章
- 子div超出父div_菜鸟学 react props 子到父
- Ubuntu18.04中pyhton默认版本从2.7换为3.x
- 谈谈让你纠结的年终奖
- iot架构 mqtt netty_Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上
- Android --- 修改百度地图的显示范围的大小
- java word添加图片_Java 替换word文档文字并指定位置插入图片
- js 设备条形码字体_蚌埠食品袋激光打码机设备-青岛博泰格睿特
- 安装 ibm-java-x86_64-sdk-6.0-9.3.x86_64.rpm 的三步骤
- vector-空间增长
- 敏捷个人第六次练习讨论:个人价值观练习
- Oracle修改字段的顺序
- Linux运行jnetpcap程序(含配置步骤)
- 利用GDB调试 MSQL
- deeplab v3+---Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
- Linux keypad 设备树,beaglebone black通过devicetree配置矩阵键盘matrix-keypad
- 杜红超、彭志红担任BCF理事
- ajax异步提示对号,jQuery Ajax显示对号和错号用于验证输入验证码是否正确
- 一个利用html5的图片裁剪功能(已解决ios压扁缩放等bug)
- 项目管理之项目成本管理
- 齐次坐标(Homogeneous Coordinate)的理解