C++ 如何制作C++;继承保留访问说明符
可能重复:C++ 如何制作C++;继承保留访问说明符,c++,C++,可能重复: 我如何在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() { b
<>我如何在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\u protected()
继承private
时,对于A
的派生类,基类的所有成员都被视为private
。与受保护的继承类似,A
的派生类可以访问protected
和public
的Base
成员
在这两种情况下,private
和protected
继承,Base
的成员都不能被“公共”访问
现在回答您的问题,使用<代码>公共< /COD>继承来保存基类的访问说明符。
让我们考虑 Base<代码>的成员的可用性:
base\u private
对客户端不可用,但对base
本身可用
base\u protected
对客户端不可用,但对base
本身可用
base\u public
对客户端和base
现在,如果您有class A:public Base
(public heritation),那么Base
成员的可用性将是:
base\u private
不适用于客户端,也不适用于A
本身
base\u protected
对客户端不可用,但对A
本身可用
base\u public
对客户端和A
现在,您要问的是如何为两个类保持相同的客户机接口,Base
和A
。如果您查看上述列表中客户的成员可用性,您会发现Base
和A
的情况完全相同:Base\u private
不可用<代码>基本保护
不可用;并且base\u public
可用
在Base
和A
之间唯一发生变化的是A
无法访问Base
私有的成员。这就是受保护的
访问控制的全部要点——它允许派生类访问它们的基类成员,而不使它们对客户端可用
所以
public
继承就是你所需要的。这就是标准public
继承所做的。@Boperson:所以它不是public
继承,让基类protected
中的所有方法都变成public
?@BìnhNguyên:你需要阅读并理解标记的副本。它应该能回答你所有的问题。@Binh-不,它对可见性设置了一个限制。如果使用受保护的继承,则继承的名称将是受保护的或私有的。有了私有继承权,一切都将是私有的。对于公共继承,所有内容都保持基类中的状态。@BoPersson:非常感谢