对于抽象类,我们首先要知道什么是抽象类。抽象类就是在类中有纯虚函数的类,什么是纯虚函数呢?
1.纯虚函数
纯虚函数和虚函数的区别就在于纯虚要在后面加"=0";
class<基类名>
{
virtual<类型><函数>(参数表)=0;
............
};
2.抽象类
抽象类就是类中有纯虚函数的类,这种类需要注意几点。
1.如果父类定义了一个或者多个纯虚函数,则父类是抽象类,抽象类不可以定义对象,没有析构和构造函数。
2. 父类有纯虚函数,则子类必须重写,如果子类不重写,则子类也是抽象类。
3.如果父类所有函数都是纯虚函数,则叫做接口(类)。
3.抽象类实例
既然知道了抽象类是什么,那我们现在就来创建一个抽象类。
#include <iostream>
using namespace std;
class Shape//形状类
{
public:
virtual float show()=0;
};
这里我定义了一个两个纯虚函数的抽象类。
class Cirde:public Shape//圆类
{
public:
int banjing;
Cirde(int a ):banjing(a){}
virtual float show( )
{
float temp;
temp=3.14*(banjing)*(banjing);
return temp;
}
Cirde(){}
~Cirde(){}
};
class Rectangle:public Shape//矩形类
{
public:
int chang;
int kuang;
float show()
{
float temp;
temp= chang*kuang;
return temp;
}
Rectangle(int a,int b):chang(a),kuang(b){}
Rectangle(){}
~Rectangle(){}
};
class Trapezoid:public Shape//梯形类
{
public:
int shangdi;
int xiadi;
int gao;
float show()
{
float temp;
temp= ((shangdi+xiadi)*gao)/2;
return temp;
}
Trapezoid(int a,int b,int c):shangdi(a),xiadi(b),gao(c){}
Trapezoid(){}
~Trapezoid(){}
这里我们创建了三个类同样都继承与基类(抽象类),当然你可以不只继承一个,继承多个只需要在class <类名>:<继承方式> <继承类>后加一个","再加你要继承的类和继承方式,注意在我们的派生类中必须要重写父类中的纯虚函数,不然子类也会因为继承了父类的纯虚函数而成为抽象类。
因为我们需要求每个类对应形状的面积,所以我们运用了show函数来计算并且返回我们需要的值,这里的float类型可以向下兼容int型,所也在我输入的全为int类型说float类型也能接收到他的值。
int main()
{
float a,b,c;
// Cirde aaa;
// Rectangle bbb;
// Trapezoid ccc;
Shape* p[3];
p[0]=new Cirde(20);
p[1]=new Rectangle(10,20);
p[2]=new Trapezoid(20,10,30);
a= p[0]->show();
b= p[1]->show();
c= p[2]->show();
cout<<"Cricle="<<a<<endl;
cout<<"Rectangle="<<b<<endl;
cout<<"Trapezoid="<<c<<endl;
cout << "Hello World!" << endl;
return 0;
}
在这里我们用了指针数组来接收类,并且给他们开辟空间。这里注意如果是指针的话要用"->"来输出他的成员变量,如果是类的话用"::".
下面是我们主函数的实现,以及运行后的结果。
Cricle=1256
Rectangle=200
Trapezoid=450
Hello World!