c++的继承与虚继承
来源:互联网 发布:淘宝苹果组装机 编辑:程序博客网 时间:2024/04/30 10:38
继承与虚继承
在c++中继承是一重要特征,是面向对象复用的重要手段,通过继承建立一个类,共享公有的东西,再实现各自不同的属性。继承是类之间的关系模型。
1、实现一个简单的继承关系:
2、成员访问限定符&继承关系:
三种成员访问限定符:(1)public 共有,(2)protected 保护,(3)private 私有
三种继承关系:(1)public 共有继承,(2)protected 保护继承,(3)private 私有继承
3、三种继承关系基类成员在派生类中的访问关系变化:
4、赋值兼容规则(public继承)
(1)子类对象可以赋值给父类对象(切片原则)。
(2)父类对象不可以赋值给子类对象。
(3)父类的指针或引用可以指向子类对象。
(4)子类的指针或引用不可以指向父类对象(可以通过强制类型转换完成,但有可能访问非法空间)。
5、派生类默认合成的六个成员函数:
如果派生类没有显示定义一下成员函数,编译系统则会默认合成这六个默认成员函数。
(1)构造函数,(2)拷贝构造函数,(3)析构函数
(4)赋值操作符重载,(5)取地址操作符重载,(6)const 修饰的取地址操作符重载
6、单继承和多继承:
单继承:一个子类只有一个直接父类的继承关系称为单继承。
多继承:一个子类有两个或两个以上直接父类的继承关系称为多继承。
7、菱形继承:
菱形继承示例源代码:
class Person{ public : string _name ; // 姓名};class Student : public Person{ protected : int _num ; //学号};class Teacher : public Person{ protected : int _id ; // 职⼯编号};class Assistant : public Student, public Teacher{ protected : string _majorCourse ; // 主修课程};void Test (){ // 显⽰指定访问哪个⽗类的成员 Assistant a ; a.Student ::_name = "xxx"; a.Teacher ::_name = "yyy";}菱形继承对象模型:
菱形继承的对象模型中存了两份Person。
菱形继承存在的问题:二义性和数据冗余。
解决方法:
(1)、显示指定访问哪个父类的成员。
(2)、虚继承。
8、虚继承
虚继承的作用:解决菱形继承的二义性问题。
菱形虚继承的对象模型:
图中的虚继承在VS编译器的环境下使用的是偏移量,在上图中直接使用指针指向虚基类是为了更直观的理解。
虚继承如何使用:只需在菱形继承中继承基类的子类继承方式前加virtual。
图解:
- 继承与虚继承
- 继承与虚继承
- (C++)继承、菱形继承和虚继承的那些事儿
- c++ 虚继承与继承的差异
- C++ 虚继承与继承的差异
- c++虚继承与继承的区别
- 类的一般继承与虚继承
- c++ 虚继承与继承的差异
- c++的继承与虚继承
- c++ 虚继承与继承的差异
- c++ 虚继承与继承的差异
- C++虚继承(八) --- 虚继承与继承的差异
- 【C++】菱形继承与虚拟菱形继承的对比分析
- 11 继承,多重继承与虚继承
- C++_Primer_chapter17 3.多重继承与虚继承
- C++: 继承与派生
- 【C++】类 与继承
- 继承与派生(C++)
- Appium 报错:org.openqa.selenium.NoSuchWindowException: no such window: target window already closed
- 在低版本ie浏览器:hover丢失
- 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
- 公钥密码之RSA密码算法扩展欧几里德求逆元!!
- android 获取本地视频文件以及缩略图
- c++的继承与虚继承
- 洛谷P1218 特殊的质数肋骨
- 斐波那契
- UICollectionView
- 字符串全排列算法学习总结
- 图片处理.md
- Android 大批量图片显示时候如何避免OOM
- Java JDBC基础
- flexigrid使用心得