У меня только один вопрос: зачем вам вообще частное наследство?
Наследование - это, по моему мнению, довольно сломанная концепция, потому что оно нарушает принцип Единой ответственности:
- вы наследуете интерфейс
- вы наследуете реализацию
К сожалению, наследование требуется для полиморфизма в объектно-ориентированном коде, поэтому вы не можете от него уклониться.
Но здесь вы явно не хотите использовать полиморфизм, поэтому я задаюсь вопросом, зачем вообще использовать наследование, поскольку это его единственное интересное использование (imo).
Вместо этого в C ++ вы можете использовать:
- Композиция, для повторного использования кода
- Свободные функции (определенные в их собственном пространстве имен)
using
, typedef
и т. Д. Для извлечения объектов изза пределами класса
Ваш пример здесь ограничен, но я тоже перенесу свои перечисления в struct
, чтобы предотвратить загрязнение пространства имен тысячами символов (и потому что struct
можно использовать в качестве шаблона parameters, где пространства имен не могут).
struct MyEnum
{
enum type
{
value
};
};
class Child
{
public:
typedef MyEnum::type Enum;
Child(Enum e = MyEnum::value);
private:
};
Я не вижу ничего плохого в определении имени, вместо этого я чувствую, что это облегчает чтение снова, так как вы знаете, о каком перечислении мы говорим ...
Действительно, private
наследование лучше избегать (и обычно заменяется на Composition).Единственный допустимый случай (imo) - для оптимизации пустых баз ... и, честно говоря, это не часто вам нужно (как обычно с оптимизацией).