C++为什么要引入虚函数

本文转自http://wimdream.blog.163.com/blog/static/181284253201131013553421/


C++的创始者希望C++生成的代码至少和他的前辈(C语言)一样快。在编译程序的时候,编译器将检查所有的代码,在如何对某个数据进行处理和可以对该类型数据进行何种处理之间寻找一个最佳点。这是一项编译时(compile-time)的检查。如果在基类和其子类中定义了同一个函数的实现(实现可以不同),那么编译器将调用基类中的方法,因为这是执行起来最快的方案!
——《写给大家看的C++书》 Larry Ullanm

为什么要引出虚函数:
在继承关系中,从this指针角度出发,可以这样考虑:指向基类和子类的指针,在运行时类型是不同的(分别指向不同的类)。 但是在编译时,他们都要指向基类的类型(从函数执行顺序可以看出,在子类初始化时,首先要进入基类的构造函数),去继承public方法,在遇到“virtual”关键字时,“编译指针(类似this的感觉)”会自动跳到对应子类中的函数实现处。而不是直接跳到基类中的函数实现。所以,子类中的方法就覆盖了基类中的方法。基类中的方法形成虚设,所以虚函数是也~

申明虚方法:(虚函数)
只要在声明的原型的前面加上 “virtual”,基类中该函数的定义可以保留也可以删掉!
用处:
在执行时自动寻找到本类型中定义的方法

声明抽象方法:(纯虚函数)
在虚函数后面加上  “=0”
用处:
在基类中还不能为其提供实现,将在子类中实现它。所以,不用在基类中给出其函数定义。当然,在基类中实现也是可以的(VS2005下测试)
TIPS:
如果不确定是否要把某个函数声明为虚方法,就把它申明为虚
析构函数是虚方法
静态函数 与 虚方法是永远对立的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值