В C++, если у меня есть класс Base
, который является частным базовым классом Derived
, но Base
не имеет виртуальных функций, было бы проще вместо этого заменить наследование с инкапсуляцией в классе Encapsulate
? Я полагаю, что единственным преимуществом для наследования в этом случае будет то, что базовый класс можно получить непосредственно в производном классе, а не через memberVariable
. Является ли та или иная практика лучше, или это скорее вопрос личного стиля?Должно ли частное наследование использовать, когда нет виртуальных?
class Base {
public:
void privateWork();
// No virtual member functions here.
};
class Derived : Base {
public:
void doSomething() {
privateWork();
}
};
class Encapsulate {
Base memberVariable;
public:
void doSomething() {
memberVariable.privateWork()
}
};
Бросить GoF Design Шаблоны из окна и начать кодирование ... :) – Gigi
Разве у вас нет хотя бы виртуального деструктора? –
@LuchianGrigore: Если наследование является приватным, вы никак не можете уничтожить полученный из базового указателя. Поэтому я бы сказал не обязательно. –