1.1抽象类
1.1.1案例引出
现实生活中有很多的类,比如图形这个类,图形又包括矩形和三角形等。在进行面向对象分析的时候,会发现一些抽象的概念,比如图形类的面积怎么计算。
现实中需要知道具体的图形(Shape)类型才能求面积,所以对概念上的图形求面积是没有意义的。
1.1.2 那么Shape类还有存在的意义吗?
面向对象是对现实世界的一种描述,如果这个Shape类不存在,对现实世界的描述就是不完整的,所以有必要存在。
1.1.3面向对象中的抽象类
- 可用于表示现实世界中的抽象概念
- 是一种只能定义类型,不能产生对象的类
- 只能被继承并重写相关函数
- 直接特征就是相关函数并没有完整的实现
1.1.4
- 程序中必须能反映抽象的图形
- 程序通过抽象类表示图形的概念
- 抽象类不能创建对象,只能用来继承
1.1.5
- 一个C++类中存在纯虚函数就成为了抽象类
- 纯虚函数指定义原型的成员函数
- C++中通过纯虚函数实现抽象类
1.2
1.2.1
- 抽象类只能用做父类被继承
- 子类必须实现纯虚函数的具体功能
- 纯虚函数被实现后成为虚函数
- 如果子类没实现纯虚函数,则子类成为抽象类
1.2.2
#include <iostream>
using namespace std;
class A
{
protected:
int mi;
int mj;
public:
A(int i =0,int j =0)
{
mi =i;
mj =j;
}
virtual int area() =0;
};
class B :public A
{
public:
B( int i ,int j)
{
mi =i;
mj =j;
}
virtual int area()
{
return mi*mj;
}
};
class C :public A
{
public:
C( int i ,int j)
{
mi =i;
mj =j;
}
virtual int area()
{
return mi *mj / 2;
}
};
void calc(A* p)
{
int d =p->area();
cout<<"d="<<d<<endl;
}
int main()
{
// A a; //error
B b(10,2);
C c(10,2);
calc(&b);
calc(&c);
return 0;
}
1.2.3 抽象类总结
- 抽象类是通过纯虚函数进行表示的。 纯虚函数表示方法:
virtual int area() =0;
- 只要这个类中存在纯虚函数,这个函数就是纯虚类
- 抽象类中除了纯虚函数还可以有其他的普通函数,或者虚函数,还可以有成员变量,和普通的类唯一不同的就是纯虚函数不能生成对象。
1.3接口
满足下面条件的C++类称为接口
- 类中没有定义任何的成员变量
- 所有的成员函数都是公有的
- 所有的成员函数都是纯虚函数
- 接口是一种特殊的抽象类
参考一 :狄泰软件学院C++进阶剖析
参考二 : C++ primer中文版