面向对象中的抽象类
- 用于现实世界的抽象概念
- 只能是定义类型,不能产生对象的类
- 只能被继承并重写相关函数(没有必要创建对象)
- 直接特征是相关函数没有完整的实现
抽象类与纯虚函数
- C++语言没有抽象的概念
- C++通过纯虚函数实现抽象类
- C++虚函数只定义原型的成员函数
- 一个C++类中存在纯虚函数就是味蕾抽象类
纯虚函数语法规则
class Shape
{
public:
virtuial double area() = 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 rect(1, 2);
Circle circle(10);
area(&rect);
area(&circle);
return 0;
}
结论
- 抽象类只能作为父类被继承
- 子类必须实现纯虚函数的具体功能
- 纯虚函数被实现后成为虚函数
- 如果没有实现纯虚函数,则子类成为抽象类
特殊的抽象类–接口
- 类中没有定义任何成员变量
- 所有成员函数都是共有的
- 所有的成员函数都是纯虚函数
- 接口是一种特殊的抽象类
#include <iostream>
#include <string>
using namespace std;
class Channel//接口
{
public:
virtual bool open() = 0;
virtual bool close() = 0;
virtual bool send(char* buf, int len) = 0;
virtual bool receive(char* buf, int len) = 0;
};
int main()
{
return 0;
}
小结
- 抽象类(描述抽象事物)只能被继承不能创建对象
- 接口是一种特殊的抽象类
- C++通过纯虚函数实现抽象类
- 类中只存在纯虚函数时成为接口