纯虚函数和抽象类

版权声明:如需转载,请注明出处。 https://blog.csdn.net/Young__Fan/article/details/79970792

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

#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;
}

总结:

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

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

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

阅读更多

扫码向博主提问

Young__Fan

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • C++
  • OpenCV
  • Qt
  • SeetaFace
去开通我的Chat快问
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页