class Base {
public:
Base() {}
void Foo(int x) {...}
};
class Derived : public Base {
public:
Derived(int args) {
/* process args in some way */
Foo(result);
}
};
是否允许在派生类的构造函数中调用基类的方法? 我认为这很好,因为Base对象应该完全构造,但我想检查一下以防万一。
答案 0 :(得分:11)
是否允许在派生类的构造函数中调用基类的方法?
是。请注意virtual
个功能。如果从Derived
派生的类覆盖虚函数,则在构造Derived
作为该进一步派生类的子对象时,动态类型始终为Derived
,因此不会覆盖任何虚函数进一步派生类被调用。 (同样适用于析构函数,BTW。)
我认为这很好,因为Base对象应该完全构造,但我想检查以防万一。
你的推理是正确的。
答案 1 :(得分:1)
以下情况存在危险:
1.方法被覆盖
2.该方法调用其他被覆盖的方法