本文介绍了为什么地址不一样?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经声明了一个基类和一个派生类,它将基类作为虚拟公共继承。之后我宣布一个派生类的对象,然后声明一个指向已声明类的对象的基类的指针对象
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 ?
推荐答案
这篇关于为什么地址不一样?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!