【发布时间】:2015-08-08 08:10:52
【问题描述】:
我的代码
class Parent { int a; };
class Child { int b; };
struct GrandChild : public Parent, public Child { int a, b, c; };
int main() {
GrandChild GC;
std::cout << "GrandChild's address is at : " <<&GC<<endl;
std::cout << "Child's address is at : " <<static_cast<Child*>(&GC)<<endl;
std::cout << "Parent's address is at : " <<static_cast<Parent*>(&GC)<<endl;
}
输出:
GrandChild's address is at : 0077F6F8
Child's address is at : 0077F6FC
Parent's address is at : 0077F6F8
为什么在static_cast之后内存位置会出现上面这样的不一致?
【问题讨论】:
-
有趣……今天学到了一些新东西,感谢您提出的真棒问题!
-
顺便说一句,这些类型名称极具误导性!
-
@LightnessRacesinOrbit: 对不起,我不知道怎么做 :(
-
@InQusitive:将基类称为“父类”和将派生类称为“子类”是很常见的。由于您已经重复使用这些术语来表示生物学家庭关系(并且不准确地,在那个方面),例如“孩子”类型不是从“父母”类型派生的示例,这令人困惑。
标签: c++ inheritance memory-address static-cast