接口与抽象类
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)接口是一种特殊的抽象类。