C++继承
来源:互联网 发布:淘宝hd怎么清除缓存 编辑:程序博客网 时间:2024/06/01 08:28
1:什么是继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序
员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承
呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。
2:继承的定义格式
class DeriveClassName:acess-label BaseClassName
派生类类名 继承方式 基类类名
继承方式:public,private,protected其中三种继承方式中基类的成员在派生类中
1,基类的private成员在派生类里是不可以被访问的,如果基类的成员不想在类外被访
问可以定义为protected
2,使用class的默认继承方式是private,struct默认是public,一般显式的给出继承方式
3,不管哪种继承方式在派生类中都可以访问基类的public,protected成员的基类的
private成员在 派生类中是不可见的
4,实际使用一般使用public继承
继承中构造函数的调用顺序
基类构造函数 -> 派生类对象构造函数 -> 派生类构造函数体
按照继承列表 声明顺序调用
顺序调用
补充:
1、基类没有缺省构造函数,派生类必须要在初始化列表中显式给出基类名和参数列表。
2、基类没有定义构造函数,则派生类也可以不用定义,全部使用缺省构造函数。
3、基类定义了带有形参表构造函数,派生类就一定定义构造函数。
析构函数调用顺序:
派生类析构函数 -> 派生类对象析构函数 -> 基类析构函数
调用顺序和声明顺序 调用顺序与基类
相反 在派生类列表声明
顺序相反
继承体系中的作用域
1. 在继承体系中基类和派生类是两个不同作用域。
2. 子类和父类中有同名成员,子类成员将屏蔽父类对成员的直接访问。(在子类成员函
数中,可以使用 基类::基类成员 访问)--隐藏 --重定义
3. 注意在实际中在继承体系里面最好不要定义同名的成员。
继承与转换--赋值兼容规则--public继承
1. 子类对象可以赋值给父类对象(切割/切片)
2. 父类对象不能赋值给子类对象
3. 父类的指针/引用可以指向子类对象
4. 子类的指针/引用不能指向父类对象(可以通过强制类型转换完成)
友元与继承
友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员。
继承与静态成员
基类定义了static成员,则整个继承体系里面只有一个这样的成员。无论派生出多少个子
类,都只有一个static成员实例单继承&多继承&菱形继承
【单继承】
一个子类只有一个直接父类时称这个继承关系为单继承。
多继承
菱形继承
虚继承--解决菱形继承的二义性和数据冗余的问题
1. 虚继承解决了在菱形继承体系里面子类对象包含多份父类对象的数据冗余&浪费空间
的问题。
2. 虚继承体系看起来好复杂,在实际应用我们通常不会定义如此复杂的继承体系。一
般不到万不得已都不要定义菱形结构的虚继承体系结构,因为使用虚继承解决数据冗余
问题也带来了性能上的损耗。
- c继承
- C++----------------继承
- 【c#】继承
- C++:继承
- C++::继承
- [C++]继承
- 【C++】继承
- 【C#】继承
- 【c++】继承
- 【C++】继承
- c#-继承
- 【C++】 继承
- 【C#】继承
- C++|继承
- 【C++】继承
- C/C++--私有继承
- [C/C++]继承
- c++:私有继承,公有继承,保护继承
- 统计字符个数
- 【腾讯Bugly干货分享】WebSocket 浅析
- ubuntu下Pycharm安装
- Jzzhu and Sequences(CF #257 Div. 2)
- 接口测试【前段与后端】
- C++继承
- 群英传笔记:自定义view一个音频跳动图的绘制
- xxx is not in the sudoers file.This incident will be reported.的解决方法
- linux基础操作
- HTTP请求过程
- Java网络编程——Socket的应用
- CSS中margin和padding的区别
- RelativeLayout布局参数汇总
- MongoDB环境配置及集群一键部署