虚函数

虚函数和抽象基类

在类的继承体系中,我们希望某些函数在不同的派生类中有不同的实现, 这种函数在基类中被声明为虚函数,用关键字virtual来修饰


Class duck{
public:
	…
	virtual void fly();
	…
}

假设我们有一个继承体系表征了所有的鸭类,基类duck(鸭子)中有函数fly(飞),我们希望不同种类的鸭子有不一样的飞行方式,便在基类duck()中把函数fly()声明为虚函数。

通过对基类虚函数的覆盖实现函数的多种实现

虚函数可以被派生类覆盖,派生类中覆盖基类实现的函数使用override关键字修饰。

Class  foxduck:public duck
{
public:
	…
	void fly()override;
	…
}

注意:


1、只有虚函数才能被覆盖,在派生类中对基类中的非虚函数进行覆盖操作是不被允许的。
2、虚函数在派生类中仍为虚函数,直到被关键字final修饰,在这之后也不能被覆盖。
3、对虚函数进行覆盖操作需要与被覆盖函数有相同的id(函数名、返回值、形参列表),其中返回值为类本身的指针时可以不一致(基类返回基类指针,派生类返回派生类指针)。


  • 纯虚函数:
    如同动物种类数不胜数,但不会有种名为“动物”的动物,有些类也只是表征派生类的共同特征,它不会被实现为一个实际的对象,这样的基类被称为“抽象基类”。

抽象基类中的虚函数也是一样,是纯粹为了“被覆盖”而存在的(为派生类提供接口)。
这样的虚函数称为“纯虚函数”,在声明时有如下形式:

Class  duck{
public:
	…
	virtual void fly()=0;
	…
}

这样的函数可以有定义(可以有,就是说一般没有),但是不能在”=0“的情形下在类的声明中带上函数体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值