【发布时间】:2015-03-10 22:11:33
【问题描述】:
所以我有一些这样的代码:
#include <iostream>
using namespace std;
class Base1 {};
class Base2 {};
class A
{
public:
A() {}
void foo(Base2* ptr) { cout << "This is A. B is at the address " << ptr << endl; }
};
A *global_a;
class B : public Base1, public Base2
{
public:
B() {}
void bar()
{
cout << "This is B. I am at the address " << this << endl;
global_a->foo(this);
}
};
int main()
{
global_a = new A();
B *b = new B();
b->bar();
system("pause");
return 0;
}
但这是我用 Visual Studio 2013 编译后得到的输出:
我是 B,我在地址 0045F0B8
这是A。B在地址0045F0B9
按任意键继续。 . .
有人能解释一下为什么地址不同吗?
【问题讨论】:
-
有人能解释一下为什么这被否决了吗?我认为这是一个合理的问题,考虑到为什么会发生这种情况并不是很明显,而且我相信很多人可以从阅读此处发布的答案中受益。
-
我可以提供部分解释:这个问题确实有道理,而且还很有趣。但是,SO 上的某些用户却不是(如果您可以将这些特征归因于人类)。这里有很多讨厌的挑剔者认为他们真的是炙手可热的编程天才。尽量不要把他们当回事,大多数 SO 社区都是由积极的用户组成,他们愿意提供帮助。你会得到我的 +1,下面的两个答案也是如此。
标签: c++ pointers visual-studio-2013 multiple-inheritance memory-address