正文

能在构造函数中调用虚函数吗?2008-04-07 18:08:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/aurora/33981.html

分享到:

可以,但是你要小心,因为在构造函数里虚函数的机制并没有启用。

#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");
}

the program compiles and produce
	B constructor
	B::f
	D constructor
注意:输出的是B::f,而不是D::f,因为在构建D的时候会先构建B,
在B尚未完成构造的时候D是不存在的,因此如果在B中调用了还没有
构建的D的成员函数(可能会修改D的变量),会导致错误。
在析构函数中同样的道理,只有本类的函数会被调用,以避免调用已
经被释放的派生类的成员函数。

阅读(3773) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册