为什么地址不一样? [英] Why isn't address same?

查看:75
本文介绍了为什么地址不一样?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经声明了一个基类和一个派生类,它将基类作为虚拟公共继承。之后我宣布一个派生类的对象,然后声明一个指向已声明类的对象的基类的指针对象

I have declared a base class and a derived class which inherit base class as virtual public . After that I am declaring a oject of derived class and then declaring a pointer object of base class pointing to object of declared class

class A
{
    protected:
    int m_A;

public:
    A(int a=0):m_A(a){ cout << "A "<< m_A<<endl;}
    ~A(){cout << "~A"<<endl;}
    void Display(){ cout << "I am in A :D"<<endl;}


};

class D1: virtual public A
{

protected:
    int m_D1;

public:

    D1(int b=0, int a=0):m_D1(b),A(a)
    {cout << "D1 "<<m_D1<<endl;}
    ~D1(){cout << "~D1"<<endl;}
    void Display(){cout <<" I am in D1 :D "<<endl;}

};
int main()
{



   D1 d(1,2);
   d.Display();
   A *a=&d;
   cout << "&d= "<<&d<<"  a= "<<a<<endl;
   a->Display();

}





我的问题是为什么& d和a的值(地址) 在这种情况下不一样,但是如果我们不继承基类是虚拟的那么它们是相同的吗?



My question is why the values(address) of "&d" and "a" are not same in this case , however they are same if we do not inherit base class is virtual ?

推荐答案

解释了虚拟推导,例如这里 [ ^ ]。

请注意,代码中实际上不需要虚拟继承。
Virtual derivation is explained, for instance here[^].
Please note there is actually no need for virtual inheritance in your code.


这篇关于为什么地址不一样?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆