мой 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() {}
};