C++ | 什么时候使用虚函数和纯虚函数

本文介绍了C++中纯虚函数、虚函数和普通函数的区别,以及它们在类设计中的应用场景。纯虚函数规定接口,子类必须实现;虚函数既有接口又有默认实现,可被子类重写;普通函数则不允子类重写。根据父类行为的一致性选择使用相应类型。
摘要由CSDN通过智能技术生成

C++ 在类中的成员函数存在三种声明方式,分别是纯虚函数虚函数普通函数。以下面的例子说明:

class Factory {
public:
	virtual void run() = 0; // 纯虚函数
	virtual void stop();  // 虚函数
	int getWorkers() const; // 普通函数
private:
	int workers;
};
class CarFactory: public Factory {...}

假设有个 CarFactory 继承上面的 Factory 类。

  • 声明纯虚函数,只是为了子类继承其接口,但是其实现需要子类自己实现(Factoryrun 交给每个工厂自己实现)。
  • 声明虚函数,是为了让子类继承其接口和缺省实现,子类可以重写父类的行为(Factory 的提供了一个默认的stop ,子类可以覆盖父类提供自己的 stop)。
  • 声明普通函数,是为了让子类继承其接口和实现,而且子类不能重写父类的行为(FactorygetWorkers 实现在每个子类中的实现都一致)

使用虚函数

父类规定子类的接口和缺省实现

class AirPlane {
public:
	virtual vod fly();
	...
};
void AirPlane::fly()  // 虚函数的实现
{
	// 缺省行为
}
// ModelA 和 ModelB 的 fly 方法使用父类的默认实现
class ModelA: public AirPlane {...}
class ModelB: public AirPlane {...}

使用纯虚函数

父类规定子类需要实现的接口,但纯虚函数也可以拥有自己的实现,可以用来作为缺省实现。

class AirPlane {
public:
	virtual vod fly() = 0;
	...
};
void AirPlane::fly()  // 纯虚函数的实现
{
	// 缺省行为
}
class ModelA: public AirPlane {
public:
	virtual void fly() {
		// 调用纯虚函数,使用父类的缺省行为
		AirPlane::fly();
	}
};
class ModelB: public AirPlane {
public:
	virtual void fly() {
		// ModelB 自己的fly操作
	}
};

时机

当父类的行为,在子类中的行为一致时,使用虚函数实现。当父类的行为,在每个子类中都不一样时,使用纯虚函数实现,同时这个纯虚函数也可以有实现内容,在子类的实现中调用这个纯虚函数,来达到默认缺省行为。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值