繁体   English   中英

如何将成员的受保护继承限制为仅限一代或几代?

[英]How do I limit protected inheritance of members to only one or a few generation(s)?

我的class Dad提供了一些孩子需要的protected方法,即使它实际上并不知道这些孩子是谁。

class Dad
{
protected:
    void method()
    {
        // some amazing stuff (I swear)
    };
};

实际的继承class Child: public Dad ,在我的程序的当前实现中,已决定将其自身派生为几个类class GrandKid1: Childclass GrandKid2: Child等。

但是,为了安全和组织起见, Child更喜欢孙子们不能自己调用method() 我如何阻止他们这样做?

显然,以下天真代码会产生链接器错误:

class Child: public Dad
{
private:
    void method();
};

如何让Child停止将protected成员method()传播到它自己的派生类?

您可以使用using指令将成员放入另一个部分。

class Dad
{
protected:
    void Method() { std::cout << "Dad"; }
};

class Child : public Dad
{
private:
    using Dad::Method;
};

class GrandChild : public Child
{
public:
    void f1() { Method(); } // Generates compilation error
};

如果您的实际代码并不比您的示例复杂得多,您可以使用friend

class Child;

class Dad
{
    friend class Child;

private:
    void method () {}
};

class Child : public Dad
{
    void someothermethod ()
    {
        method ();
    }
};

你必须实际定义成员函数,不仅声明它:

class Child: public Dad
{
private:
    void method() {}
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM