наследовать часть базового класса - PullRequest
0 голосов
/ 14 февраля 2012

У меня под рукой следующая проблема.Существует класс Foo и еще один класс Bar, который является членом класса Foo.

class Bar{
private:
    some stuff;
public:
    Bar();
    some other_stuff;
};
class Foo{
private:
    Bar bar;
public:
    Foo(); // Initialize the bar object here in the constructor
    void doSomethingWithBar();
};

Теперь оба класса огромны!Для некоторых приложений мне нужно внести изменения как в Foo, так и в Bar, поэтому существуют классы Foo_Derived и Bar_Derived.

class Bar_Derived: public Bar{
private:
    some NEW_stuff;
public:
    Bar_Derived();
    some New_other_stuff;
};
class Foo_Derived: public Foo{
private:
    Bar_Derived bar;
public:
    Foo_Derived(); 
    void doSomethingWithBar();
};

Насколько я понимаю наследование, после вызова Foo_Derived() также вызывается конструктор базового класса для Foo, который инициализирует объект bar в базовом классе (типа Bar.Я делаю так, что вместо этого используется объект bar в производном классе? (Типа Bar_Derived). Мне нужен только базовый класс (Foo), чтобы инициализировать базовую часть объекта bar и делать все остальное в Foo_Derived сам по себе. Это вообще возможно?

Извините, если вопрос не ясен. Я просто очень запутался!

1 Ответ

0 голосов
/ 14 февраля 2012

Инициализатор базового класса только инициализирует базовую часть объекта, так как это все, что он знает. Инициализатор класса должен инициализировать только те вещи, которые всегда нужно инициализировать для всех членов этого класса.

В конструкторе для Foo_Derived вы можете использовать список инициализаторов, чтобы указать, какой конструктор Bar_Derived вызывать. Конструктор Bar_Derived может использовать любой конструктор Bar, какой пожелает. Если у вас нет Bar_Derived конструктора, который конструирует Foo_Derived::bar так, как вы этого хотите, вы должны написать его или переосмыслить, как настроена ваша иерархия.

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