我手头有以下问题。有一个类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
课。这甚至可能吗?
很抱歉,问题不明确。我真的很困惑自己!
答案 0 :(得分:0)
基类初始化程序只会初始化对象的基本部分,因为这就是它所知道的全部内容。类初始化程序应该只初始化那些总是需要为该类的所有成员初始化的东西。
在Foo_Derived
的构造函数中,您可以使用初始化列表来指定要调用的Bar_Derived
构造函数。 Bar_Derived
构造函数可以使用它希望的任何Bar
构造函数。如果您没有Bar_Derived
构造函数以您希望的方式构造Foo_Derived::bar
,则应编写一个或重新考虑如何设置层次结构。