[英]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: Child
, class 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.