可以,但是你要小心,因为在构造函数里虚函数的机制并没有启用。
#include<string>
#include<iostream>
using namespace std;
class B {
public:
B(const string& ss) { cout << "B constructor\n"; f(ss); }
virtual void f(const string&) { cout << "B::f\n";}
};
class D : public B {
public:
D(const string & ss) :B(ss) { cout << "D constructor\n";}
void f(const string& ss) { cout << "D::f\n"; s = ss; }
private:
string s;
};
int main()
{
D d("Hello");
}
B constructor B::f D constructor
注意:输出的是B::f,而不是D::f,因为在构建D的时候会先构建B,
在B尚未完成构造的时候D是不存在的,因此如果在B中调用了还没有
构建的D的成员函数(可能会修改D的变量),会导致错误。
在析构函数中同样的道理,只有本类的函数会被调用,以避免调用已
经被释放的派生类的成员函数。
评论