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

iag*_*ito 2 c++ inheritance private protected restriction

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

class Dad
{
protected:
    void method()
    {
        // some amazing stuff (I swear)
    };
};
Run Code Online (Sandbox Code Playgroud)

实际的继承class Child: public Dad,在当前实现我的计划,已决定将自己推断为几类class GrandKid1: Child,class GrandKid2: Child等等.

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

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

class Child: public Dad
{
private:
    void method();
};
Run Code Online (Sandbox Code Playgroud)

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

pur*_*ess 9

您可以使用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
};
Run Code Online (Sandbox Code Playgroud)