【发布时间】:2013-06-03 10:29:09
【问题描述】:
当我查看以下代码示例时,我认为 d.B::num 与 b.num 相同,但事实并非如此。它似乎是一个不同的变量,有自己的地址。当我点击运行按钮时,我看到b.num、d.num 和d.B::num 三个变量中的每一个都有其关联值(分别为 3、4 和 5)。
为什么会这样?如果和b.num不一样,这里的d.B::num到底是什么?
struct B {int num;};
struct D : public B {int num;};
int main() {
B b;
D d;
b.num = 3;
d.num = 4;
d.B::num = 5;
cout << b.num << endl;
cout << d.num << endl;
cout << d.B::num << endl;
return 0;
}
【问题讨论】:
-
但是...您有两个不同的对象:
b和d。d.B::num指的是B::num在d实例中的实例。b.num是一个完全不同的实例的一部分。 -
d和b是不同的对象,所以很明显d.B::num和b.B::num将是不同的[子] 对象(B::num不是static)。我不确定我明白你在问什么? -
你不能“覆盖”变量。
-
没有覆盖变量。
D::num隐藏B::num。一个D实例有两个int数据成员,其中一个(B's)是隐藏的。所以如果你想访问它,你必须具体说明它。 -
这只是普通的名称隐藏。
标签: c++ inheritance overriding scope-resolution