55利用虚函数实现动态多样性

简介: 55利用虚函数实现动态多样性

C++入门——60s从0到1

利用虚函数实现动态多样性

 

动态多样性是指在运行时根据对象的实际类型调用相应的方法。在C++中,利用虚函数可以实现动态多样性。

 

虚函数是一种特殊的成员函数,它可以被派生类重写。在基类中声明一个虚函数,并在派生类中重新定义这个函数时,可以使用关键字`override`。当使用基类指针或引用调用虚函数时,实际上会调用派生类中的函数。

 

下面是一个简单的示例代码,演示了如何使用虚函数实现动态多样性:

 

#include <iostream>
using namespace std;
 
// 基类 Shape
class Shape {
public:
    virtual double area() = 0; // 纯虚函数
};
 
// 派生类 Rectangle
class Rectangle: public Shape {
public:
    double width;
    double height;
    Rectangle(double w, double h): width(w), height(h) {}
    double area() override { return width * height; } // 重写虚函数
};
 
// 派生类 Circle
class Circle: public Shape {
public:
    double radius;
    Circle(double r): radius(r) {}
    double area() override { return 3.14 * radius * radius; } // 重写虚函数
};
 
int main() {
    Shape* shape1 = new Rectangle(5, 6);
    Shape* shape2 = new Circle(3);
    cout << "The area of rectangle is " << shape1->area() << endl;
    cout << "The area of circle is " << shape2->area() << endl;
    delete shape1;
    delete shape2;
    return 0;
}

在上面的代码中,我们定义了一个抽象基类`Shape`,它包含一个纯虚函数`area()`。然后我们定义了两个派生类`Rectangle`和`Circle`,它们都重写了`Shape`中的虚函数`area()`。在`main()`函数中,我们创建了一个`Shape`类型的指针,并将其分别指向一个`Rectangle`对象和一个`Circle`对象。然后我们调用了它们的`area()`方法,输出了它们的面积。由于这两个对象都是`Shape`类型的,所以我们可以在不知道它们具体类型的前提下调用它们的`area()`方法。这就是动态多样性的实现方式之一。通过这种方式,我们可以编写更加灵活和可扩展的代码。

目录
相关文章
|
算法 前端开发 Java
在字节当了几个月的牛马,醒悟了。
以前也分享过不少实习体验,比如去年就分享了一位师弟的美团实习体验:美团实习三个月,我受益良多,今天来分享一下一位学习圈中学弟的字节实习体验。
458 0
|
数据采集 算法 数据挖掘
数据分析的第一步:数据加载与整理
在数据分析的过程中,数据加载和整理是非常重要的第一步。这一步的质量和效率直接影响到后续的数据分析和结果的准确性。在本文中,我们将介绍数据加载和整理的基本概念和技术,以及在 Python 中的实现方法。
|
JSON Java fastjson
Java Http 接口对接太繁琐?试试 UniHttp 框架吧
UniHttp 是一个声明式的 HTTP 接口对接框架,旨在简化第三方 HTTP 接口的调用过程。通过注解配置,开发者可以像调用本地方法一样发起 HTTP 请求,无需关注请求的构建和响应处理细节。框架支持多种请求方式和参数类型,提供灵活的生命周期钩子以满足复杂的对接需求,适用于企业级项目的快速开发和维护。GitHub 地址:[UniAPI](https://github.com/burukeYou/UniAPI)。
|
JavaScript Ubuntu Linux
Node.js 安装配置
10月更文挑战第1天
267 0
|
弹性计算 网络安全
快速部署 RAGFlow 社区版
RAGFlow是一个基于深度文档理解的开源RAG(检索增强生成)引擎。当与LLM集成时,它能够提供真实的问答功能,并得到各种复杂格式数据的充分引用的支持。本文介绍如何通过计算巢快速部署 RAGFlow社区版。
快速部署 RAGFlow 社区版
|
数据采集 机器学习/深度学习 数据挖掘
使用Python进行数据预处理与清洗的最佳实践
本文探讨了Python在数据预处理和清洗中的关键作用。预处理包括数据收集、整合、探索、转换和标准化,而清洗则涉及缺失值、重复值、异常值的处理及数据格式转换。文中提供了使用pandas库进行数据读取、缺失值(如用平均值填充)和重复值处理、异常值检测(如IQR法则)以及数据转换(如min-max缩放)的代码示例。此外,还讲解了文本数据清洗的基本步骤,包括去除标点、转换为小写和停用词移除。整体上,文章旨在帮助读者掌握数据预处理和清洗的最佳实践,以提高数据分析的准确性和效率。
2114 2
|
JavaScript API vr&ar
NSDT孪生场景编辑器系统介绍
NSDT编辑器,基于WebGL技术,依托丰富的模型资产库,通过拖拽式的操作,方便用户高效便捷的搭建三维数字孪生场景,配合twin服务平台,实现孪生设备姿态控制的虚实同步。支持场景导出并进行二次开发。
742 1
NSDT孪生场景编辑器系统介绍
|
分布式计算 DataWorks 监控
DataWorks操作报错合集之遇到“OSERROR: argument list too long”的错误,该如何处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
204 1
|
JavaScript 定位技术 API
Js地图路线规划以及点击获取经纬度
Js地图路线规划以及点击获取经纬度
|
C++ 开发者
C++程序中利用虚函数实现动态多态性
C++程序中利用虚函数实现动态多态性
212 2