C++基础(7)——类和对象(5)

前言

本文主要介绍C++中的继承

4.6.1:继承和继承方式(公有、保护、私有)

C++基础(7)——类和对象(5)_第1张图片

4.6.2:继承中的对象模型,sizeof()求子类对象大小

C++基础(7)——类和对象(5)_第2张图片

4.6.3:子类继承父类后,两者构造和析构顺序

父类先构造、子类先析构

C++基础(7)——类和对象(5)_第3张图片

 如果是简单的一个类包含另一个类的对象

C++基础(7)——类和对象(5)_第4张图片

4.6.4:继承同名处理办法

当子类中有成员属性和父类中的成员属性同名时,可以添加作用域分别访问到子类和父类中的成员属性

C++基础(7)——类和对象(5)_第5张图片

有相同名字的成员函数也是一样的操作

C++基础(7)——类和对象(5)_第6张图片

注意:当子类中有和父类相同的函数名,那么父类中该函数和其重载的函数都不能通过子类对象直接进行访问,如果想访问就要向上面一样加作用域

C++基础(7)——类和对象(5)_第7张图片

C++基础(7)——类和对象(5)_第8张图片

4.6.5:多继承语法

前提:Son子类继承Dad类和Mon类,其中Dad类和Mon类就名字,构造、析构打印相关打印的内容不同

子类继承多个父类,执行构造函数的顺序按照继承顺序;当父类中出现了同名的成员属性或函数时,要加父类的作用域去加以区分

C++基础(7)——类和对象(5)_第9张图片

改变一下继承的顺序

C++基础(7)——类和对象(5)_第10张图片

4.6.6:菱形继承(钻石继承、虚继承)

基本概念:两个子类A、B继承同一个父类C,然后一个类D同时继承类A和类B

会出现的问题

1:数据二义性,类D会从类A和类B中继承名字相同的属性或方法

2:有些数据只需继承一份即可,不需要继承两份

C++基础(7)——类和对象(5)_第11张图片

通过GrandSon创建一个对象,每个类中的数据都会继承一份,没有必要(8+8+4)

C++基础(7)——类和对象(5)_第12张图片

使用虚继承(virtual关键字)来实现数据一份,继承的是指针,一个指针占8字节。主要是继承了vbptr指向虚基类表,在虚基类表中有偏移

C++基础(7)——类和对象(5)_第13张图片

 使用虚继承后的代码,打印了一些地址和类的大小

C++基础(7)——类和对象(5)_第14张图片

C++基础(7)——类和对象(5)_第15张图片

总结

以上就是本文的全部内容,非常感谢你能看到这

你可能感兴趣的:(C++学习,c++,开发语言)