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()到自己的派生类?
您可以使用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)