我理解公共/受保护成员受保护继承保护,并且它们是私有继承的私有。但是我可以明确地将它们更改为公开(如下所示)吗?我实际上并不完全理解" public:A :: x" ....
class A
{
public:
int x;
int y;
protected:
int z;
};
class B : protected A
{
public:
A::x;
};
class C : private B
{
public:
B::y;
B::z;
};
答案 0 :(得分:1)
该行
A::x;
是一个"访问声明符",所以它确实允许你" make"在派生类的public
区域中可见的继承成员。它还用于显示可见hidden overloaded functions。但是现在它已在C ++中弃用,因此请尝试使用
using A::x;
示例:
#include <iostream>
class Foo
{
protected:
int x{10};
};
class Bar : public Foo
{
public:
using Foo::x; // makes x "public" here
};
int main()
{
Bar bar;
std::cout << bar.x << std::endl;
}
答案 1 :(得分:0)
class B : protected A
{
public:
A::x;
};
这不再是有效的语法。现在已弃用此access declarator
。要更改继承成员的可访问性,您应使用using
关键字
class B : protected A
{
public:
using A::x;
};
现在,虽然x
被继承为受保护,但您明确将其重命名为public
访问权限。所以现在可以这样做了:
B b;
b.x = 0; //Ok
b.y = 0; //Error, cannot access protected member