C++基础(7)——类和对象(5)
前言
本文主要介绍C++中的继承
4.6.1:继承和继承方式(公有、保护、私有)

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

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

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

4.6.4:继承同名处理办法
当子类中有成员属性和父类中的成员属性同名时,可以添加作用域分别访问到子类和父类中的成员属性

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

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


4.6.5:多继承语法
前提:Son子类继承Dad类和Mon类,其中Dad类和Mon类就名字,构造、析构打印相关打印的内容不同
子类继承多个父类,执行构造函数的顺序按照继承顺序;当父类中出现了同名的成员属性或函数时,要加父类的作用域去加以区分

改变一下继承的顺序

4.6.6:菱形继承(钻石继承、虚继承)
基本概念:两个子类A、B继承同一个父类C,然后一个类D同时继承类A和类B
会出现的问题
1:数据二义性,类D会从类A和类B中继承名字相同的属性或方法
2:有些数据只需继承一份即可,不需要继承两份

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

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

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


总结
以上就是本文的全部内容,非常感谢你能看到这
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/666196.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!