lionel chang

导航

c++中的虚函数

1.为什么c++没有虚构造函数?

因为构造函数是在对象完全构造之前运行的,在构造函数运行的时候,对象的动态类型还不完整。

2.为什么c++中赋值操作符不是虚函数?

将类的复制操作符设为虚函数很可能会令人混淆,而且没有什么好处。

在基类中将operator=定义为虚函数,并不会影响派生类中使用的赋值操作符。每个类都有自己的赋值操作符,派生类中的赋值操作符有一个与类本身类型相同的形参,该类型必须不同于继承层次中的任意其他类的赋值操作符的形参类型。

3.虚函数的使用

i.静态函数不能为虚函数,因为静态函数是被一个类的各个对象共有的,它不会因为继承而改变。

ii.inline函数不能为虚函数,因为inline不能在运行中确定其位置。

iii.虚函数有一定的空间开销。当一个类拥有虚函数时,编译器会构造一个虚函数表,用于存放虚函数的地址。

参考:

http://shaxquan.blog.51cto.com/751410/384555

4.虚函数的实现机制

虚函数在c++中的实现机制就是用虚表和虚指针

更具体请参考:

http://blog.csdn.net/jiangnanyouzi/article/details/3720807

5.析构函数是虚函数的优点是什么?

为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。

详细原因请参考:

http://www.cppblog.com/franksunny/archive/2008/05/19/50424.aspx



posted on 2012-09-04 14:47  woshizyl  阅读(159)  评论(0编辑  收藏  举报