有人可以尝试解释一下为什么我在使用这个指针和 & 运算符时会在基址和派生对象的地址上有所不同。下面是我的代码
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"Base Address "<<this<<endl;
}
};
class B:public A
{
public:
B()
{
cout<<"Deri Address "<<this<<endl;
}
};
int main()
{
B b;
}
The O/P is
Base Address 0x7fff500e9bdf
Deri Address 0x7fff500e9bdf
两者都是一样的。
当我在 main 中添加另外两个语句时,如下所示
#include <iostream>
使用命名空间标准;
class A
{
public:
A()
{
cout<<"Base Address "<<this<<endl;
}
};
class B:public A
{
public:
B()
{
cout<<"Deri Address "<<this<<endl;
}
};
int main()
{
B b;
A a;
cout<<&a<<endl<<&b<<endl;
}
O/P如下图
Base Address 0x7fff82c696df
Deri Address 0x7fff82c696df
Base Address 0x7fff82c696de
0x7fff82c696de
0x7fff82c696df
现在我可以清楚地看到地址不同
a) 这种差异的原因可能是什么
b) 我想知道的另一件事是派生类中的基础子对象是否与基础对象完全相同?我对此感到困惑,因为如果我们在基类中说如果我们有一个变量 x 并且如果我们有这个基类的派生类(非多态情况)现在如果我们在派生中谈论基子对象,它是基类中存在的相同 x 也存在于派生类的基子对象中(我的意思是派生的基子对象和基子对象中具有相同地址的变量),或者我们在基子对象和基子对象中都有一个单独的 x 副本派生的(我的意思是具有不同地址的变量)
Please clarify?