从派生构造函数调用基类方法
问题描述:
class Base {
public:
Base() {}
void Foo(int x) {...}
};
class Derived : public Base {
public:
Derived(int args) {
/* process args in some way */
Foo(result);
}
};
是否允许在派生类的构造函数中调用基类的方法? 我会想象这是好的基础对象应该完全构建,但我想检查以防万一。从派生构造函数调用基类方法
答
是否允许在派生类的构造函数中调用基类的方法?
是的。请注意0的功能。如果派生自Derived
的类覆盖虚拟函数,而将Derived
构造为该另一派生类的子对象,则动态类型总是Derived
,因此不调用在其他派生类中覆盖的虚拟函数。 (对于析构函数,BTW也是如此。)
我想这是好的,因为基础对象应该完全构建,但我想检查以防万一。
您的推理是正确的。
答
有当危险:
1.该方法被重写
2.方法调用被覆盖
这是完全错误的其他方法。重载的函数和构造函数肯定没有问题。你的意思是_overridden_? (如果是这样,不要忘记,这只适用于虚拟功能。) – sbi 2010-06-19 10:50:14
upvoted(和sbi的答案也是),但你的意思是'重写',而不是'重载' – tpdi 2010-06-19 10:52:00
sbi,在adf88的防守中,overridden意味着虚拟否则它是隐藏的,没有被覆盖,可能是一个错误)。 – tpdi 2010-06-19 10:54:03