一般来说,许多时候基类并不能确定函数的实现方法,只能确定函数的功能。但是函数调用的时候必须要用到该函数。这种情况下,C++提供了一种机制,成为纯虚函数,属于虚函数的一种,体现了面向对象的多态性。
#include <iostream>
#define PI 3.14
using namespace std;
class Calculate{
virtual double getPerimeter() = 0;
virtual double getArea() = 0;
virtual double getCircleArea() = 0;
};
class BaseData: public Calculate{
private:
double bottom;
double height;
double radius;
public:
BaseData(double a, double b, double c):bottom(a),height(b),radius(c){}
double getPerimeter(){
return 2 * (bottom + height);
}
double getArea(){
return bottom * height;
}
double getCircleArea(){
return PI * radius * radius;
}
};
int main(){
double a, b, c;
cin>>a>>b>>c;
BaseData* baseData = new BaseData(a,b,c);
cout<<baseData->getPerimeter()<<endl;
cout<<baseData->getArea()<<endl;
cout<<baseData->getCircleArea()<<endl;
delete baseData;
return 0;
}
一些细节:
- 在上面代码中,Calculate被称为抽象类,抽象类就是包含纯虚函数的类。
- Calculate中声明的纯虚函数必须在派生类中全部实现,否则编译不会通过。
- 抽象类无法声明对象。
- 仅含有纯虚函数而不含有任何其他成员函数和成员变量的类就叫做接口类。
- 在swift语言中,无抽象类的概念,但是“协议”与抽象类概念类似,用法类似。