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

父类指针指向子类对象 :

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

一个多继承问题: 

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对象

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值