C++ 学习笔记——C++纯虚函数和抽象类
  0okL55w8xmzg 2023年12月15日 24 0


C++纯虚函数

什么是纯虚函数

1,纯虚函数只有函数名、参数、返回值类型。

2,纯虚函数的定义是在函数句首使用 virtual 关键字修饰,并且在句末增加 “= 0”。

virtual void funtion() = 0;

3,纯虚函数只有声明,基类可以存在纯虚函数的实现(但无意义,因为子类都要重写)

4,定义纯虚函数的目的在于,使每一个派生类都拥有相同的函数规范。

5,C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。

6,C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。

7,C++中的纯虚函数也是一种“运行时多态”。

纯虚函数在基类或者父类中只有声明,没有实现,在子类中具体实现各自的逻辑。C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。

虚函数和纯虚函数的区别

  • 1、纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码。
  • 2、包含纯虚函数的类不能定义其对象,而包含虚函数的则可以。

纯虚函数的实际意义

纯虚函数只提供申明,没有实现,是对子类的约束,是“接口继承”。定义纯虚函数的目的在于,使每一个派生类都拥有相同的函数规范。

纯虚函数使用举例

#include <iostream>
using namespace std;

// 线
class Line
{
public:
    Line(float len);
    // 定义一个纯虚函数,求面积
    virtual float area() = 0;
    // 定义一个纯虚函数,求体积
    virtual float volume() = 0;

protected:
    float m_len;
};
Line::Line(float len) : m_len(len) {}

// 矩形
class Rec : public Line
{
public:
    Rec(float len, float width);
    float area();

protected:
    float m_width;
};
Rec::Rec(float len, float width) : Line(len), m_width(width) {}
float Rec::area()
{
    return m_len * m_width;
}

// 长方体
class Cuboid : public Rec
{
public:
    Cuboid(float len, float width, float height);
    float area();
    float volume();

protected:
    float m_height;
};
Cuboid::Cuboid(float len, float width, float height) : Rec(len, width), m_height(height) {}
float Cuboid::area()
{
    return 2 * (m_len * m_width + m_len * m_height + m_width * m_height);
}
float Cuboid::volume()
{
    return m_len * m_width * m_height;
}

// 正方体
class Cube : public Cuboid
{
public:
    Cube(float len);
    float area();
    float volume();
};
Cube::Cube(float len) : Cuboid(len, len, len)
{
}
float Cube::area()
{
    return 6 * m_len * m_len;
}
float Cube::volume()
{
    return m_len * m_len * m_len;
}

int main()
{
    Line *p = new Cuboid(10, 20, 30);
    cout << "The area of Cuboid is " << p->area() << endl;
    cout << "The volume of Cuboid is " << p->volume() << endl;

    p = new Cube(15);
    cout << "The area of Cube is " << p->area() << endl;
    cout << "The volume of Cube is " << p->volume() << endl;

    return 0;
}

C++ 学习笔记——C++纯虚函数和抽象类_笔记

这段代码展示了一个简单的继承和多态的例子,用于计算不同几何形状(线、矩形、长方体、正方体)的面积和体积。下面逐个解释每个部分的含义:

Line类:
这是一个基类,表示一条线。它有一个构造函数Line(float len),用于初始化线的长度。该类定义了两个纯虚函数area()和volume(),分别用于计算面积和体积。这意味着Line类是一个抽象类,不能被实例化。它有一个保护成员变量m_len,表示线的长度。

Rec类:
这是Line类的派生类,表示一个矩形。它有一个构造函数Rec(float len, float width),用于初始化矩形的长度和宽度。它重写了基类的area()函数,计算矩形的面积。它有一个保护成员变量m_width,表示矩形的宽度。

Cuboid类:
这是Rec类的派生类,表示一个长方体。它有一个构造函数Cuboid(float len, float width, float height),用于初始化长方体的长度、宽度和高度。它重写了基类的area()和volume()函数,分别计算长方体的表面积和体积。它有一个保护成员变量m_height,表示长方体的高度。

Cube类:
这是Cuboid类的派生类,表示一个正方体。它有一个构造函数Cube(float len),用于初始化正方体的边长。它重写了基类的area()和volume()函数,分别计算正方体的表面积和体积。

在main()函数中,通过基类指针Line* p来实现多态性。首先,创建一个指向Cuboid对象的指针,调用area()和volume()函数计算长方体的表面积和体积,并输出结果。然后,将指针重新指向一个Cube对象,再次调用area()和volume()函数计算正方体的表面积和体积,并输出结果。

通过使用继承和多态,可以方便地计算不同几何形状的面积和体积,同时实现了代码的重用和灵活性。

C++抽象类

什么是C++ 抽象类

C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能生成(new出)对象,只有实现了这个纯虚函数的子类才能new出对象。

抽象类具体有什么作用

抽象类通常是作为基类,让派生类去实现纯虚函数。派生类必须实现纯虚函数才能被实例化。

面向对象编程,必须有个对象,而基类一般都是很宽泛的一个概念,也没有必要去实例化,只有派生出的子类才有实际对象。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月15日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   2024年05月01日   77   0   0 C++
  BYaHC1OPAeY4   2024年05月08日   54   0   0 C++
  yZdUbUDB8h5t   2024年05月05日   41   0   0 C++
  oXKBKZoQY2lx   2024年05月17日   54   0   0 C++
0okL55w8xmzg