c++抽象类的运用

对于抽象类,我们首先要知道什么是抽象类。抽象类就是在类中有纯虚函数的类,什么是纯虚函数呢?

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!




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值