c++ - 为什么范围解析不适用于重写变量?

标签 c++ inheritance overriding scope-resolution

当我查看以下代码示例时,我认为 d.B::numb.num 相同,但事实并非如此。它似乎是一个具有自己地址的不同变量。当我单击运行按钮时,我看到三个变量 b.numd.numd.B::num 中的每一个都有其关联值(分别为 3、4 和 5)。

为什么会这样?如果 d.B::numb.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[int B::num]

D[int B::num, int D::num]

如果你调用 d.num 它默认为 D::num 如果你调用 d.B::num 它默认为 B::num

关于c++ - 为什么范围解析不适用于重写变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16978616/

相关文章:

java - 是否可以同时对有界泛型类和泛型接口(interface)进行泛型子类化?

java - 属性和多态性

c++ - 如何覆盖已定义类型的 ostream << 运算符

c++ - Xcode 3.2.6 和 4 链接器错误 ld :bad codegen, pointer diff in ... to global weak symbol

c++ - 模板和标题问题

c++ - 发出信号或捕获 'nan',因为它们出现在 C++ 数字代码库的计算中

c++ - 如何在 MacOS 上安装 Boost?

c# - InternalsVisibleTo 属性问题

java - Java中如何不重写子类中的方法?

c++ - C++ 中的覆盖方法