C++ 继承 : scoping and visibility of members

标签 c++ class inheritance redeclaration

你能解释一下为什么这是不允许的吗,

#include <stdio.h>

class B {
private:
    int a;
public:
    int a;
};

int main() {
    return 0;
}

这是什么时候?

#include <stdio.h>

class A {
public:
    int a;
};

class B : public A{
private:
    int a;
};

int main() {
    return 0;
}

在这两种情况下,我们在 class B 中都有一个名为 a 的公共(public)变量和一个私有(private)变量。


现在编辑!

最佳答案

In both the cases, we have one public and one private variable named a in class B.

不,那不是真的。

在第一种情况下,您不能在同一范围内拥有两个同名的标识符。在第二种情况下,B::a 隐藏了 A::a,要访问 A::a,您必须完全限定姓名:

b.a = 10; // Error. You can't access a private member.
b.A::a = 10; // OK.

关于C++ 继承 : scoping and visibility of members,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3033593/

相关文章:

c++ - const ref 传递的模板化参数是否优化为在足够小时按值传递?

c++ - Entrek CodeSnitch 与 Windows Mobile 5/6

c# - 在 .NET 中调用基类中的测试方法

c++ - operator= 和 C++ 中不继承的函数?

C++ 从基类继承构造函数

c++ - 指向 vector 元素的指针崩溃

c++ - 从主线程询问运行对象表 (ROT) 时出错

python - 使用 SQLAlchemy 基于类自动构建数据库表

python - 使用父类定义的方法时出错

c++ - 如何将 vector 添加到我的结构中以创建一个库存系统,在该系统中我可以仅使用一个结构将多种不同的 Wine 添加到系统中?