C++类——纯虚函数与抽象类

纯虚函数

定义:

       纯虚函数是一种特殊的虚函数。 在许多情况下, 在基类中不能对虚函数给出有意义的实现, 这时可以把它声明为纯虚函数, 它的实现留给该基类的派生类去做。

作用:

       作为派生类中的成员函数的基础, 并实现多态性。

形式:
virtual 返回类型 函数名(形式参数列表) = 0;

抽象类

定义:

       包含纯虚函数的基类称为抽象类。

注意:
  • 一个抽象类只能作为基类来派生新类。 如果派生类中没有重新定义纯虚函数, 而只是继承基类的纯虚函数, 则这个派生类仍然是一个抽象类。 反之, 该派生类就不再是抽象类了, 而是可以建立对象的具体的类。
  • 抽象类不能定义对象, 但可以定义指向抽象类的指针和引用。
  • 抽象类不能用作参数类型函数返回类型显式转换的类型。


这里写图片描述

#include<iostream>

using namespace std;

//抽象类,有2个纯虚函数
class Shape
{
public:
    virtual double area() = 0;
    virtual double volumn() = 0;
};

//派生类 正方体类
class Cube : public Shape
{
private:
    float a_;
public:
    Cube(float a = 0)
    {
        a_ = a;
    }
    ~Cube(){}

    virtual double area()
    {
        return a_ * a_ * 6;
    }
    virtual double volumn()
    {
        return a_ * a_ * a_;
    }
};

//派生类 长方体类
class Cuboid : public Shape
{
private:
    float a_;
    float b_;
    float h_;
public:
    Cuboid(float a = 0, float b = 0, float h = 0)
    {
        a_ = a;
        b_ = b;
        h_ = h;
    }
    ~Cuboid(){}
    virtual double area()
    {
        return (a_ * b_ + a_ * h_ + b_ * h_) * 2;
    }
    virtual double volumn()
    {
        return a_ * b_ * h_;
    }

};

void cal(Shape &s)
{
    cout << "表面积为:" << s.area() << endl;
    cout << "体积为:" << s.volumn() << endl;

}
int main()
{
    //抽象类不能定义对象。
    //Shape s;

    Cube cube1(1.5);
    Cuboid cuboid1(2, 1, 1.5);

    //1.直接使用派生类对象去调用各自的成员方法
    cout << "正方体cube1的表面积为:" << cube1.area() << endl;
    cout << "正方体cube1的体积为:" << cube1.volumn() << endl;
    cout << "长方体cuboid1的表面积为:" << cuboid1.area() << endl;
    cout << "长方体cuboid1的体积为:" << cuboid1.volumn() << endl;

    //使用多态的思想,通过实参的类型去判断调用的函数
    cal(cube1);
    cal(cuboid1);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/xiaokunzhang/article/details/81015000