【C++深度剖析教程30】C++中抽象类和接口
程序员文章站
2022-05-22 11:14:11
...
加qq1126137994 微信:liu1126137994
1、面向对象中的抽象概念;
在现实中,需要知道具体的图形类型才能知道如何求面积,但是对于抽象的‘图形’,我们是没法求其面积的,而且对其求面积也是没有意义的:
class shape
{
public:
double area()
{
return 0;
}
};
shape 只是一个概念上的类型,没有对象!!!
2、那么什么是抽象类呢?
面向对象中的抽象类:
- 可用于表示现实世界中的抽象概念
- 是一种只能定义类型却不能产生对象的类型
- 只能被继承并重写相关函数
- 直接特征是相关函数没有完整的实现
上面说道的shpe是现实世界中的抽象的图形概念:
因此:
- 程序中必须能反应抽象的图形概念
- 程序中通过抽象类来表示图形的概念
- 抽象类不能用于创建对象,只能用于继承
3、C++中是如何实现抽象类的:
- C++通过纯虚函数实现抽象类
- 纯虚函数指的是:只定义函数原型的成员函数
-
一个C++的类中存在纯虚函数,就构成了抽象类
4、 纯虚函数的语法规则:
抽象类初探:
#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;
}
小结:
- 抽象类只能用作父类被继承
- 子类必须实现纯虚函数的具体功能
- 纯虚函数被实现后,成为虚函数
- 如果子类没有实现纯虚函数,那么子类成为抽象类
5、什么是接口?
满足下面条件的C++类成为接口:
- 类中没有定义任何的成员变量
- 所有的成员函数都是公有的
- 所有的成员函数都是纯虚函数
- 接口是一种特殊的抽象类
接口初探:
#include <iostream>
#include <string>
using namespace std;
class Channel
{
public:
virtual bool open() = 0;
virtual void close() = 0;
virtual bool send(char* buf, int len) = 0;
virtual int receive(char* buf, int len) = 0;
};
int main()
{
return 0;
}
6、总结:
- 抽象类用于描述现实世界中的抽象概念
- 抽象类只能被继承不能创建对象
- C++中没有抽象类的概念
- C++中通过纯虚函数实现抽象类
- 类中只有纯虚函数时称为接口
- 接口是一种特殊的抽象类
下一篇: 史上最全抽象类和接口的区别