cpp父类指针指向子类的问题以及多继承中的指针

版权声明: https://blog.csdn.net/dashoumeixi/article/details/82897404

父类指针指向子类对象 :

                                        父类指针指向子类对象中的父类对象;

一个多继承问题: 

class Base{};
class A : public Base
{};
class B : public Base
{};
class C : public A , public B
{};
int main(int argc, char *argv[])
{
    C c;
    //Base * base = &c; // 出错 .是A中的Base 还是 B中的Base? 发生歧义
    Base *ba1 = (A*)&c; //ok
    Base *ba2 = (B*)&c; //ok
    return 0;
}
上面 A 对象中含有Base对象, B对象中含有Base对象 , C 对象中有A,B 2个对象,以及2个Base对象.
所以无法直接转换

如果是虚继承:

class Base{
public:
    Base() { cout << "Base()" << endl;}
};
class A : virtual public Base
{};
class B : virtual public Base
{};
class C: public A , public B
{
public:
    C():Base(){}
};
/*
此时,Base是一个虚基类(A,B分别虚继承),即A,B共享同一个Base对象.
并由下层子类 C 直接调用Base构造函数(注:如果不是由下层子类C直接构造Base, 那么A,B将又产生2个父类)
下面看区别
*/
int main(int argc, char *argv[])
{

     C c;
    Base * base_p = &c; // ok ,此时在C对象中包含了Base对象
    return 0;
}
Base *p2 = (A*)&c;
Base *p3 = (B *)&c;
以上代码一样可以;
A , B共享同一个Base对象

一句话结束:  父类指针指向子类对象中的父类对象;

猜你喜欢

转载自blog.csdn.net/dashoumeixi/article/details/82897404
今日推荐