C++ 接口是使用抽象类来实现的。
如果类中至少有一个函数被声明为纯虚函数
,则这个类就是抽象类
。纯虚函数
是通过在声明中使用 = 0
来指定的,如下所示:
1 2 3 4 5 6 7 8 9 10
| class Box { public: virtual double getVolume() = 0; private: double length; double breadth; double height; };
|
设计抽象类(通常称为 ABC)的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。
因此,如果一个 ABC 的子类需要被实例化,则必须实现每个虚函数,这也意味着 C++ 支持使用 ABC 声明接口。如果没有在派生类中重写纯虚函数,就尝试实例化该类的对象,会导致编译错误。
可用于实例化对象的类被称为具体类
。
实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include <iostream>
using namespace std;
class Shape { public: virtual int getArea() = 0; void setWidth(int w) { width = w; } void setHeight(int h) { height = h; }
protected: int width; int height; };
class Rectangle : public Shape { public: int getArea() { return (width * height); } }; class Triangle : public Shape { public: int getArea() { return (width * height) / 2; } };
int main(void) { Rectangle Rect; Triangle Tri;
Rect.setWidth(5); Rect.setHeight(7); cout << "Total Rectangle area: " << Rect.getArea() << endl;
Tri.setWidth(5); Tri.setHeight(7); cout << "Total Triangle area: " << Tri.getArea() << endl;
return 0; }
|
结果:
1 2
| Total Rectangle area: 35 Total Triangle area: 17
|
C++ 接口(抽象类)