Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何制作C++;继承保留访问说明符_C++ - Fatal编程技术网

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:非常感谢