以下内容源于慕课网的学习整理,如有侵权,请告知删除。
1、纯虚函数
- 没有函数体;
- =0;
- 即只有函数声明,而没有函数定义的虚函数,是纯虚函数。
2、抽象类
- 概念:含有纯虚函数的类,叫抽象类。
- 抽象类无法实例化对象。
- 抽象类的子类也可能是抽象类。
(1)只有抽象类的子类把抽象类的纯虚函数都给实现了,才能用子类来实例化对象
3、接口类
- 概念:仅含有纯虚函数的类称为接口类。
- 没有任何数据成员,只有成员函数,而且成员函数都是纯虚函数。
- 接口类用来表达一种能力或协议。
- 传参是子类。
(1)细节
- 一个类可以继承接口类的同时也继承非接口类。
- 一个类可以继承一个接口类,也可以继承多个接口类。
- 可以使用接口类指针指向其子类对象,并调用子类对象中实现的接口类中纯虚函数。
- 不能使用接口类实例化对象。
(2)接口类代码示例
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
/**
* 定义射击类:CanShut
* 定义纯虚函数:aim、reload
*/
class CanShut
{
public:
virtual void aim() =0;
virtual void reload() =0;
};
/**
* 定义枪类:Gun
* 公有继承射击类
* 实现成员函数:aim、reload
*/
class Gun : public CanShut
{
public:
virtual void aim()
{
cout << "Gun -- aim" << endl;
}
virtual void reload()
{
cout << "Gun -- reload" << endl;
}
};
/**
* 定义含参函数射击:hunting
* 调用参数的aim与reload函数
*/
void hunting(CanShut* s)
{
s->aim();
s->reload();
}
int main(void)
{
// 实例化枪对象
Gun* p=new Gun;
// 调用含参函数hunting,将对象枪传入函数中
hunting(p);
// 释放内存
delete p;
p=NULL;
return 0;
}