【发布时间】:2012-12-14 11:34:37
【问题描述】:
可能重复:
What are access specifiers? Should I inherit with private, protected or public?
如何在 C++ 中创建一个派生类,它保留属性和方法的访问说明符,如下所示:
class Base
{
private:
void base_private();
protected:
void base_protected();
public:
void base_public();
};
class A: [what type is appropriate here?] Base
{
public:
void test() {
base_protected(); // Ok
}
};
class B: [what type is appropriate here?] A
{
public:
void test() {
base_protected(); // Ok
}
};
int main()
{
A a;
B b;
a.base_public(); // Ok
a.base_protected(); // Not Ok
b.base_protected(); // Not Ok
b.test(); // Ok
return 0;
}
我的意思是base_protected() 方法在派生类中仍然受到保护,但base_public() 是公共的。
【问题讨论】:
-
这就是标准的
public继承所做的。 -
@BoPersson:所以不是
public继承使基类protected中的所有方法都变为public? -
@BìnhNguyên:您需要阅读并理解标记的副本。它应该回答你所有的问题。
-
@Binh - 不,它设置了可见性限制。如果您使用受保护的继承,则继承的名称将是受保护的或私有的。使用私有继承,一切都是私有的。使用公共继承,一切都保持在基类中的方式。
-
@BoPersson:非常感谢
标签: c++