C++学习笔记45——继承方式
来源:互联网 发布:云梦网络建站怎么样 编辑:程序博客网 时间:2024/04/30 23:26
1,继承方式概述
派生列表中使用的访问标号将继承方式分为3中:public继承、protected继承和private继承。
派生类中继承而来的成员的访问级别由基类中该成员的访问级别和派生列表中的访问标号两者共同决定。通用的原则是:取两者中更严格的那个。
细分如下:
- public继承: 继承而来的成员保持原先的访问级别不变,基类的public成员成为派生类的public成员,基类的protected成员成为派生类的protected成员;
- protected继承:基类的的public、protected成员都成为派生类的protected成员;
- private继承: 基类的的public、protected成员都成为派生类的private成员;
只要不是基类中的private成员,其他成员在派生类中都是可见的,在派生类的成员函数定义体中都是可以直接使用的,这一点与继承方式无关。
继承方式(派生列表中的访问标号)影响的是派生类的用户对继承而来的成员的访问权限。
2,接口继承与实现继承
public继承让派生类获得了基类的所有接口——public成员函数,而protected继承让基类中的成员函数成为protected或private成员,只能在其他成员函数的定义体中使用,而不能被类的使用者使用,这就是实现继承。
设计良好的类层次中,public派生类对象可以用在任何需要基类对象的地方
3,去除个别成员:using
派生类可以恢复继承成员的访问级别,但仅仅是恢复,不能使访问级别比基类中原来指定的更严格或宽松。使用的方法就是“using”关键字。
举例如下:
class Base{public:void test() { cout << "Base\n" << endl; };private:int n;};class Drived :private Base{public:void new_test() { cout << "New"; test(); };//using Base::test();//error!//using Base::n; // error C2877: “Base::n”无法从“Base”访问using Base::test;};
如同例子中展示的那样,这种用法对private成员无能为力,不能用这种办法让派生类继承到基类的private成员。
由于test成员在Base中已经定义了,在Drived中只用它的名字即可,不能再加括号,否则会被认为是在调用函数。
在上面的例子中,由于是private继承,所以test在Drived中原本是private成员;使用using声明后,test就变成了public成员了,能够被类的用户使用了。
4,默认继承机制
使用class定义的派生类,默认使用private继承;
使用struct定义的派生类,默认使用public继承。
使用class还是struct定义类只有两个地方不同:
- 默认的成员访问级别
- 默认的派生保护级别
然而,事实上绝大多数继承都是public继承,而不是class默认的private继承。
0 0
- C++学习笔记45——继承方式
- 黑马程序员 — Objective-C学习笔记(二):继承
- C++——三种继承方式
- 学习笔记(objective-c)-继承
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第八章 继承
- Objective-C学习笔记(二十五)——属性与方法的继承学习
- Objective-C学习笔记(二十六)——成员变量的继承学习
- 继承与阻止继承——20170313 学习笔记
- C++学习笔记:C的继承与超越——指针与引用
- C++学习笔记:C的继承与超越——const关键字
- Object-C学习笔记三-----继承
- Objective-C学习笔记第四章继承
- 【C++】【学习笔记】【028】多继承
- 【C++】【学习笔记】【029】虚继承
- Objective-C学习笔记九:继承一
- Objective-C学习笔记十:继承二
- 【学习笔记】C++primer plus 13.继承
- JavaScript学习笔记——继承
- 矩阵相似的意义和解释
- HDU1242 Rescue(BFS松弛)
- [Memcached]Memcached 的基础
- Codeforces 13C
- 最大子列和问题
- C++学习笔记45——继承方式
- 使用IntelliJ IDEA配置Erlang开发环境
- R文件无法自动生成之处理办法汇总
- 注册码原理
- Linux Mac之间文件传输
- rpm -qa | grep jdk
- C++开发人脸性别识别教程(14)——灰度图像识别BUG处理
- linux字符设备驱动程序(一)----------分配设备号并注册设备
- 如何让软件绑定计算机硬件