C ++: конструктор защищенных классов - PullRequest
8 голосов
/ 24 декабря 2010

Если класс всегда будет наследоваться, имеет ли смысл сделать конструктор protected?

class Base
{
protected:
    Base();
};

class Child : protected Base
{
public:
    Child() : Base();
};

Спасибо.

Ответы [ 2 ]

10 голосов
/ 24 декабря 2010

Это имеет смысл только в том случае, если вы не хотите, чтобы клиенты создавали экземпляры Base, скорее вы намереваетесь, чтобы это был базовый класс некоторых [производных] классов, и / или намеревались использовать его друзья Base (см. Пример ниже).Помните, что protected функции (и конструкторы) могут быть вызваны только из производных классов и friend классов.

class Sample;
class Base
{
    friend class Sample;
protected:
    Base() {}
};

class Sample
{
 public:
   Sample()
   {
      //invoking protected constructor
      Base *p = new Base();
   }
};
4 голосов
/ 24 декабря 2010

Если это всегда будет база («миксин»), да. Имейте в виду, что класс с чисто виртуальными функциями всегда будет основой, но вам не нужно этого делать, так как он все равно не может быть создан.

Кроме того, укажите либо общедоступный виртуальный деструктор, либо защищенный не виртуальный деструктор .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...