【学习笔记】虚函数与多态性,纯虚函数

1.虚函数:

比如,父类animal和子类fish中各有一个函数breathe(),分别执行不同的操作。

定义一个方程:

void fn(animal *pAn){

pAn -> breathe();

}

然后

void main()

{

animal *pAn;

fish fh;

pAn = &fh;

fn(pAn);

}

这时候程序会允许父类还是子类里的breathe()呢?

答案是 父类的breathe()


解释:

当fish类的对象fh的地址赋予pAn的时候,c++编译器进行了类型转换, C++编译器认为pAn保存的就是animal对象的地址。所以当fn函数执行pAn->breathe()的时候,调用的是pAn。(根本原因就是在编译时就确定了具体调用的函数)


解决办法:

使用虚函数~在animal类中的breathe前加上virtual: virtual void breathe()

当编译器编译时,发现animal类的breathe函数是虚函数,就会采用late binding(迟绑定)技术,即编译时不确定具体调用的函数,而是在具体运行时依据对象的类型确定调用哪个函数(这种能力就是c++的多态性)

之前的在编译时确定哪个函数被绑定的方法叫early binding(早期绑定)



2.纯虚函数


纯虚函数是指被标明为不具体实现的虚成员函数。纯虚函数让类先具有一个操作名称,而没有操作内容,在派生类继承时再具体给出定义。

含有纯虚函数的类叫做抽象类,这种类不能声明对象,只作为基类位派生类服务。

*所以派生类中必须完全实现基类中的纯虚函数,否则派生类也变成了抽象类,不能实例化对象










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值