美文网首页
5. C++ 抽象类

5. C++ 抽象类

作者: 开源519 | 来源:发表于2020-11-29 19:44 被阅读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 总结

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

  • 包函数纯虚函数的类都称为抽象类。
  • 抽象类不可用于直接定义对象,只能在由实现了纯虚函数的子类定义对象。
  • 继承于抽象类的子类,必须实现抽象类中的纯虚函数。

相关文章

  • 5. C++ 抽象类

    1 简介 抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概...

  • C++面试题系列:纯虚函数,虚函数,抽象类,纯抽象类

    C++面试题系列:纯虚函数,虚函数,抽象类,纯抽象类 2020年10月15日 14:40

  • c++语法4

    接上一篇继续学习抽象类、函数模板 抽象类 c++中的抽象类是通过纯虚函数体现的,凡是含有纯虚函数的类叫做抽象类纯虚...

  • C++中的抽象类和接口

    C++中的抽象类和接口 抽象类 抽象类用来描述一种类型应该具备的基本特征与功能, 具体如何去完成这些行为由子类通过...

  • 《JAVA编程思想》学习笔记:第9章(接口)

    第9章 接口 目录 9.1 C++的抽象设计 : 在C++中,只有抽象类的概念(没有abstract关键字),没有...

  • #iOS抽象类

    iOS抽象类 思维点 Objective-C 没有抽象类只是指语言的语法构造上没有C++/Java那样专门的abs...

  • C++ 抽象类

    包含纯虚函数的类被称为抽象类,因为我们不能定义包含纯虚函数的类的对象,抽象类存在的唯一用途,就是定义派生类。如果抽...

  • C++ 抽象类

    抽象类不可被实例化,不可使用new关键字,必须通过继承由派生类实现其抽象方法。并且不可被封装,一定包含纯虚函数。

  • C++----接口(抽象类)

    接口描述了类的行为和功能,而不需要完成类的特定实现。 C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,...

  • 1.2.25_C++ 接口(抽象类)

    接口描述了类的行为和功能,而不需要完成类的特定实现。 C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,...

网友评论

      本文标题:5. C++ 抽象类

      本文链接:https://www.haomeiwen.com/subject/dsmkwktx.html