面向对象中的抽象类
- 可用于表示现实世界中的抽象概念
- 是一种只能定义类型,而不能产生对象的类
- 只能被继承并重写相关函数
直接特征是相关函数没有完整的实现
- c++语言中没有抽象类的概念
- C++中通过纯虚函数实现抽象类
- 纯虚函数是指只定义原型的成员函数
一个C++类中存在纯纯虚函数就成了抽象类
纯虚函数的语法规则
class Shape
{
public:
virtual double area() = 0; //"= 0"用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体。
};
#include <iostream>
#include <string>
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 re(1,1);
Circle ci(2);
area(&re);
area(&ci);
}
- 抽象类只能用作父类被继承
- 子类必须实现纯虚函数的具体功能
- 纯虚函数被实现后成为虚函数
如果子类没有实现纯虚函数,则子类成为抽象类
满足下面条件的C++类则称为接口
- 类中没有定义任何的成员变量
- 所有的成员函数都是公有的
- 所有的成员函数都是纯虚函数
- 接口是一种特殊的抽象类