纯虚函数和抽象类

这里写图片描述
这里写图片描述

#include<iostream>
using namespace std;

//图形类
//如果一个类拥有纯虚函数,就称这个类是一个抽象类。
//不管这个类中有没有成员属性,只要这个类有纯虚函数,就是一个抽象类,抽象类是不能实例化的
class Shape
{
public:
    //求图形面积的方法
    //表示图形类声明一个方法getArea(),她是一个纯虚函数,没有函数的实现
    //接口
    virtual double getArea() = 0;//=0 就是纯虚函数的语法,没有其他含义

    int a;
    int b;
};

//正方形:
//如果一个普通类,继承拥有纯虚函数的类,如果不重写纯虚函数,依然是个抽象类。
//依然不能被实例化,若想实例化,必须要重写这个父类中的所有纯虚函数

class Rect :public Shape
{
public:
    Rect(int a)
    {
        this->a = a;
    }
    virtual double getArea()
    {
         cout << "正方形面积" << endl;
        return a*a;
    }

private:
    int a;//正方形的边长
};

//圆类
class Circle :public Shape
{
public:
    Circle(int r)
    {
        this->r = r;
    }

    virtual double getArea()
    {
         cout << "圆形面积" << endl;
        return 3.14*r*r;
    }
private:
    int r;
};

//三角形类
class Tri :public Shape
{
public:
    Tri(int a,int h)
    {
        this->a = a;
        this->h = h;
    }
    virtual double getArea()
    {
        cout << "三角形面积" << endl;
        return 0.5*a*h;
    }
private:
    int a;//底
    int h;//高
};


//面向抽象类写的一个架构函数
void printArea(Shape *sp)//多态
{
    cout << sp->getArea() << endl;
}
//业务层,面向抽象类编程
int main()
{
    //main中所有使用的变量类型都是抽样类的Shape的类型
    Shape *sp1 = new Rect(10);
    Shape *sp2 = new Circle(20);
    Shape *sp3 = new Tri(10,20);

    printArea(sp1);
    printArea(sp2);
    printArea(sp3);
    return 0;
}

总结:

如果一个类拥有纯虚函数,就称这个类是一个抽象类。

不管这个类中有没有成员属性,只要这个类有纯虚函数,就是一个抽象类,抽象类是不能实例化的。

如果一个普通类,继承拥有纯虚函数的类,如果不重写纯虚函数,依然是个抽象类,依然不能被实例化,若想实例化,必须要重写这个父类中的所有纯虚函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值