接口与抽象类
C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。
如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0"
来指定的。在 C++ 语言中没有抽象类的概念,可通过纯虚函数来实现抽象类。纯虚函数是指只定义原型的成员函数,如果一个 C++ 类中存在纯虚函数便就成为了抽象类。
例如,
#include <iostream> using namespace std; class Shape { public: virtual double area() = 0; }; class Rect : public Shape { int ma; int mb; public: Rect(int a, int b) { ma = a; mb = b; } double area() { return ma * mb; } }; class Circle : public Shape { int mr; public: Circle(int r) { mr = r; } double area() { return 3.14 * mr * mr; } }; void area(Shape* p) { double r = p->area(); cout << "r = " << r << endl; } int main() { Rect rect(1, 5); Circle circle(10); area(&rect); area(&circle); return 0; }
注意:
1) “= 0”
是用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体。
2)抽象类用于描述现实世界中的抽象概念,抽象类只能被继承而不能创建对象。
3)在 C++ 中没有抽象类的概念,是通过纯虚函数来实现抽象类。
4)类中只存在纯虚函数的时候才能成为接口。
5)接口是一种特殊的抽象类。