父类指针指向子类对象 :
父类指针指向子类对象中的父类对象;
一个多继承问题:
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对象
一句话结束: 父类指针指向子类对象中的父类对象;