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

C++纯虚函数

什么纯虚函数

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

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

virtual void funtion() = 0;

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

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

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

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

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

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

虚函数和纯虚函数的区别

纯虚函数的实际意义

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

纯虚函数使用举例

#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-&gt;area() << endl;
    cout << "The volume of Cuboid is " << p-&gt;volume() << endl;

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

    return 0;
}

在这里插入图片描述

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

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出对象。

抽象类具体有什么作用

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

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

原文地址:https://blog.csdn.net/mao_hui_fei/article/details/134711059

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_34332.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注