以下内容源于慕课网的学习整理,如有侵权,请告知删除。
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;
}