Я видел из кода, что у производного класса есть переменная-член, которая является указателем на его базовый класс, например
class Base {
private:
int a;
int b;
int d;
void init(){// ... }
public:
Base(int a_ , int b_) : a(a_), b(b_){
init();
}
Base() = default;
int getA(){return a;}
}
class Derived : public Base {
private:
Base* base;
int c;
public:
Derived(int a_, int b_, int c_): base(new(Base(a_, b_)), c(c_){base->getA() // for initialization of another function};
}
int main(){
Derived derived(0,0,0);
}
Это что-то умное? Почему или как это может быть полезно иметь элемент Base внутри производного класса, если мы можем просто вызвать publi c или защищенные методы Base из Derived?
Другой вопрос: я получаю дважды построенную базу , правильно? один для производного объекта, который вызывает конструктор по умолчанию, а другой из списка инициализации, который вызывает конструктор не по умолчанию.
Редактировать: Код, который я представляю, является ОЧЕНЬ короткой версией того, в что я вступил. Они используют элемент base в производном для выполнения множества задач, то есть вызова членов Base в качестве параметров для других функций или инициализации членов Derived. Я думаю, что это может быть только для инкапсуляции. Но это, конечно, странно.
Надеюсь, мой вопрос не слишком запутан! Я просто не понимаю, что могло бы быть в основе такого применения!