加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++中通过纯虚函数实现抽象类
- 类中只有纯虚函数时称为接口
- 接口是一种特殊的抽象类