24.C++- 抽象类(存虚函数)、接口、多重继承
2021-06-23 05:06
标签:多重继承 为我 培训 teacher 判断 student 如何 channel 一个 什么是抽象类 比如图形(Shape)类, 就是一个抽象的概念,因为我们无法计算这个“图形”的面积,所以它的成员函数area()是空的。 而继承它的子类(矩形,圆形,三角形等)就可以去重写area()成员函数. 里面通过数学公式,计算出面积. 参考图形(Shape)类,代码如下: 既然Shape是个抽象的类,那就根本没有该类的对象,我们该如何避免他人使用Shape类创建对象呢? 答: 在C++中,通过纯虚函数来避免 纯虚函数 纯虚函数需要在声明函数名前面加上virtual,在最后面加个=0; 比如: 举个例子 比如我们的蓝牙,可以打开,关闭,收发数据 而网卡也一样,可以打开,关闭,收发数据. 类似的还有串口等等 这些类都拥有同样的行为,只是内容不同,所以它们的父类Channel只需要构造纯虚函数,所以便被称为接口,该父类代码如下: 多重继承的问题1 当多个不同的父类指针指向同一个多重继承的子类时,可能拥有不同地址 比如: 运行打印: 为什么,pa指针和pb指针都指向d对象,它们的地址却有所不同? 这是因为Derived d对象地址里依次存了两个不同的父类成员变量值,如下图所示: 从上图看到,其实pa和pb还是位于d对象地址里,只是指向的位置不同而已.雅思培训教材所以在多重继承里,最好不要使用等号直接判断两个指针对象是否相等. 多重继承的问题2 多重继承可能产生冗余的成员 比如: 老师teacher类,学生student类都继承于people类 而有些老师,为了工作还要考博士学位,既是老师又是学生,所以同时继承于老师teacher类,学生student类,则该类的成员便会拥有两个people类成员,从而产生冗余 在工程中,如何正确使用多重继承 例如: 运行打印: 可以发现,使用dynamic_cast转换,判断出来的地址就是相等的. 以p->equal(dynamic_cast 文章来源:https://www.cnblogs.com/lifexy/p/8743963.html 24.C++- 抽象类(存虚函数)、接口、多重继承 标签:多重继承 为我 培训 teacher 判断 student 如何 channel 一个 原文地址:https://www.cnblogs.com/xiongjim/p/9674152.html