5. C++ 抽象类

2020-11-29  本文已影响0人  拂去尘世尘

1 简介

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类, 它不能生成对象 ;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。
抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。----百度百科

抽象类的主要作用是对多个子类相同部分抽象为一个基类,其中相同的方法或数据在基类定义,如需更改的方法可在基类声明为纯虚函数,子类可自定义纯虚函数功能。可理解为基类定义了类方法规范,具体功能由子类实现。

2 纯虚函数

虚函数在《C++多态》已经介绍过。纯虚函数与虚函数的区别在于:纯虚函数没有实际的实现,其只能通过子类实现具体的功能。
格式:

virtual <类型><函数名>(<参数表>)=0;
E.g: virtual void show()=0;

需要注意的是:

3 实例

Eg.实现正方形与圆形的面积计算。(多态的例子重新拿来使用)

#include<iostream>

using namespace std;
const double PI = 3.14;  

//基类
class Shape
{
public:
    virtual void show() = 0;    //显示各类基本元素 (纯虚函数)
    virtual void showArea() = 0;  //显示面积 (纯虚函数)
    virtual void Caculate() = 0;  //面积算法 (纯虚函数)
    ~Shape(){ }
};
//正方形
class Square : public Shape
{
public:
    Square()
    {
        Lenth = 0;
        Width = 0;
    }
    Square(double lenth, double width)
    {
        Lenth = lenth;
        Width = width;
    }
    virtual void show()
    {
        cout << "Lenth:" << Lenth << " Width" << Width << endl;
    }
    virtual void showArea()
    {
        cout << "SquareArea:" << SquareArea << endl;
    }
    virtual void Caculate()
    {
        SquareArea = Lenth * Width;
    }
private:
    double Lenth;
    double Width;
    double SquareArea;
};

//圆形
class Circle : public Shape
{
public:
    Circle(){ Radius = 0; }
    Circle(double radius)
    {
        Radius = radius;
    }
    virtual void show()
    {
        cout << "半径:" << Radius << endl;
    }
    virtual void showArea()
    {
        cout << "CircleArea" << CircleArea << endl;
    }
    virtual void Caculate()
    {
        CircleArea = PI * Radius * Radius;
    }
private:
    double Radius;
    double CircleArea;
};


void print(Shape& sp)
{
    sp.Caculate();
    sp.show();
    sp.showArea();
}


int main()
{
    Square sq1(5, 4);
    Circle cr1(7);
    Square sq2;
    print(sq1);
    print(cr1);
    print(sq2);

    return 0;
}

结果输出:

Lenth:5 Width4
SquareArea:20
半径:7
CircleArea153.86
Lenth:0 Width0
SquareArea:0

4 总结

本篇文章主要记录抽象类的概念及具体展现实例,抽象类的作用更类似于对方法接口的规范,即在抽象类中声明需要用到的方法名为纯虚函数,子类编程中就无须重新定义方法名,只需要实现抽象类的纯虚函数即可。
根据本篇内容,总结一下使用抽象类的注意事项:

上一篇下一篇

猜你喜欢

热点阅读