声明:本博的图片均截图自慕课网手机客户端,图片的版权归慕课网所有。
解决方法是在菱形继承中使用虚继承,以上图为例,操作方法是类B和类C虚继承类A。
class B virtual public : A { public: B(); `~B(); }; class C virtual public : A { public: C(); `~C(); };解决方法是使用宏定义,还是以上图的菱形继承为例
//A.h文件 #ifnDef A_H #Def A_H Class A() { ... }; #endif子类是一个特殊的父类。因此可以用父类的指针指向子类,也可以用子类对象给父类对象赋值。
父类指针指向子类对象 子类对象给父类对象赋值 代码示例 //假设有两个类是父子关系。父类:Person,子类:Soldier int main() { Soldier s1; //子类对象给父类对象赋值 Person p1=s1; //父类指针指向子类对象 Person * p2=& s1; //但是二者绝不相等 //下面这句代码是错的,因为虽然子类对象可以给父类对象赋值,但是 //第一、赋值时发生了截断。父类只能保存自己数据成员有的部分内容 //其指针也只能指向自己有的那部分内容 //第二、类本身是一种类型,不同的类名,即使其数据成员和成员函数一致, //也不是同一类型,其对象也不可能相等。 p1=s1//这句是错的 }