Если класс всегда будет наследоваться, имеет ли смысл делать конструктор protected
?
class Base
{
protected:
Base();
};
class Child : protected Base
{
public:
Child() : Base();
};
Спасибо.
Если класс всегда будет наследоваться, имеет ли смысл делать конструктор protected
?
class Base
{
protected:
Base();
};
class Child : protected Base
{
public:
Child() : Base();
};
Спасибо.
Это имеет смысл только в том случае, если вы не хотите, чтобы клиенты создавали экземпляры Base
, а хотите, чтобы он был базовым классом некоторых [производных] классов, и/или намереваетесь использовать его друзьями Base
(см. пример ниже) . Помните, что protected
функции (и конструкторы) можно вызывать только из производных классов и friend
классов.
class Sample;
class Base
{
friend class Sample;
protected:
Base() {}
};
class Sample
{
public:
Sample()
{
//invoking protected constructor
Base *p = new Base();
}
};
Если это всегда будет база («миксин»), то да. Имейте в виду, что класс с чистыми виртуальными функциями всегда будет базовым, но вам не нужно этого делать, так как он все равно не может быть создан.
Кроме того, назначьте ему общедоступный виртуальный деструктор или защищенный невиртуальный деструктор.
Base
. - person GManNickG   schedule 24.12.2010