我可以更改默认继承的访问器吗?
Can I change accessors from the default inheritance?
我了解到 public/protected 成员受保护继承保护,并且他们是私有继承。但是我可以将它们明确地更改为 public 吗(如下所示)?我其实不太明白"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;
};
行
A::x;
是一个 "access declarator",因此它确实允许您 "make" 继承成员在派生 class 的 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;
}
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
我了解到 public/protected 成员受保护继承保护,并且他们是私有继承。但是我可以将它们明确地更改为 public 吗(如下所示)?我其实不太明白"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;
};
行
A::x;
是一个 "access declarator",因此它确实允许您 "make" 继承成员在派生 class 的 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;
}
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