54多态性

简介: 54多态性

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

多态性

 

多态性是C++中一个非常强大的特性,它允许在不知道一个对象的确切类型的情况下,使用该对象。多态性使得代码更加灵活和可扩展,因为它允许在运行时动态地调用方法。

 

多态性的概念

 

多态性是指同一个方法可以在不同的类中具有不同的行为。在C++中,多态性是通过虚函数和纯虚函数来实现的。

 

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

 

- 纯虚函数是一种没有实现的方法,它的声明方式是在函数声明后面加上`=0`。纯虚函数的目的是让派生类必须实现这个方法,否则它们不能成为这个抽象类的子类。

 

示例代码

 

下面是一个简单的示例代码,演示了如何使用多态性:

 

#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()`方法。这就是多态性的魅力所在!

目录
相关文章
|
数据可视化 Swift 开发者
零一万物开源Yi系列“理科状元”Yi-9B,消费级显卡可跑,魔搭社区最佳实践
零一万物发布并开源了Yi系列中的“理科状元”——Yi-9B,可在魔搭体验
|
9月前
|
SQL 数据库
YMP迁移达梦时,报错:查询出现异常
YMP迁移达梦时,报错:查询出现异常
|
10月前
|
开发框架 前端开发 Go
eino — 基于go语言的大模型应用开发框架(二)
本文介绍了如何使用Eino框架实现一个基本的LLM(大语言模型)应用。Eino中的`ChatModel`接口提供了与不同大模型服务(如OpenAI、Ollama等)交互的统一方式,支持生成完整响应、流式响应和绑定工具等功能。`Generate`方法用于生成完整的模型响应,`Stream`方法以流式方式返回结果,`BindTools`方法为模型绑定工具。此外,还介绍了通过`Option`模式配置模型参数及模板功能,支持基于前端和用户自定义的角色及Prompt。目前主要聚焦于`ChatModel`的`Generate`方法,后续将继续深入学习。
1359 7
|
Java Spring 容器
基于RestTemplate扩展,支持Get请求传递javaBean参数
本文介绍了如何扩展RestTemplate以支持在GET请求中传递JavaBean参数的问题。在项目中,作者发现使用RestTemplate进行GET请求时,不能直接传递JavaBean作为参数,而需要手动将参数拼接到URL中,这种方法不仅繁琐而且容易出错
基于RestTemplate扩展,支持Get请求传递javaBean参数
pdf文件转化为png照片 (PyMuPDF下面的fitz)
pdf文件转化为png照片 (PyMuPDF下面的fitz)
|
存储 缓存 安全
平头哥 CPU 编程模型、指令集|学习笔记
快速学习平头哥 CPU 编程模型、指令集
2098 0
平头哥 CPU 编程模型、指令集|学习笔记
|
机器学习/深度学习 缓存 人工智能
X-Anylabeling: 新一代自动标注工具
X-AnyLabeling:具备增强功能的高级自动标注解决方案
9444 0
X-Anylabeling: 新一代自动标注工具
|
应用服务中间件 Linux Shell
Docker进阶 dockerfile指令构建docker镜像
Docker进阶 Dockerfile指令,编译dockerfile文件构建镜像,dockerfile常用指令,实操训练:Dockerfile构建Nginx镜像: FROM #指定基础镜像,一切从这里开始构建 MAINTAINER #镜像是谁写的,姓名+邮箱 RUN #镜像构建的时候需要运行的命令 ADD #步骤:tomcat镜像,这个tomcat压缩包!添加内容 WORKDIR #镜像的工作目录 VOLUME #挂载的目录 EXPOST #暴露端口配置
Docker进阶 dockerfile指令构建docker镜像
|
Java 网络架构 微服务
SpringCloud Day01---微服务架构编码构建(二)
SpringCloud Day01---微服务架构编码构建
SpringCloud Day01---微服务架构编码构建(二)