多态性的真正意义(用途)是什么

2023-12-19

我是面向对象编程的新手。虽然我明白什么是多态,但我无法得到它的真正用途。我可以有不同名称的函数。为什么我应该尝试在我的应用程序中实现多态性。


经典答案:想象一个基类Shape。它暴露了一个GetArea方法。想象一个Square类和一个Rectangle类,以及一个Circle班级。而不是创建单独的GetSquareArea, GetRectangleArea and GetCircleArea方法,您只需在每个派生类中实现一个方法。您不必知道哪个确切的子类Shape你使用,你只需调用GetArea然后你就得到了结果,无论它是哪种具体类型。

看看这段代码:

#include <iostream>
using namespace std;

class Shape
{
public:
  virtual float GetArea() = 0;
};

class Rectangle : public Shape
{
public:
  Rectangle(float a) { this->a = a; }
  float GetArea() { return a * a; }
private:
  float a;
};

class Circle : public Shape
{
public:
  Circle(float r) { this->r = r; }
  float GetArea() { return 3.14f * r * r; }
private:
  float r;
};

int main()
{
  Shape *a = new Circle(1.0f);
  Shape *b = new Rectangle(1.0f);

  cout << a->GetArea() << endl;
  cout << b->GetArea() << endl;
}

这里需要注意的一件重要事情是 - 您不必知道您正在使用的类的确切类型,只需知道基类型,您就会得到正确的结果。这在更复杂的系统中也非常有用。

祝学习愉快!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多态性的真正意义(用途)是什么 的相关文章

  • 无法在类对象的 ArrayList 中存储值。 (代码已编辑)

    这基本上是一个 Java 代码转换器 它涉及一个 GUI 让用户输入类类型 名称和方法 为了存储值 我创建了一个类VirtualClass与ArrayList
  • 在javascript中访问函数内的实例变量?

    如何以最简单的方式访问函数内的实例变量 function MyObject Instance variables this handler Methods this enableHandler function var button doc
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • 如何为自定义 S3 类实现提取/取子集 ([ [<-, [[ [[<-)] 函数?

    我有一个自定义的 S3 类foo 它在正常的基础上添加了一些自定义行为data frame foo object lt data frame class foo object lt c foo data frame 对于这个类 还应该有一个
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 约束包如何工作?

    背后的想法数据 约束 Forall http hackage haskell org packages archive constraints 0 3 2 doc html src Data Constraint Forall html据我
  • 如何考虑子类型的多态性

    里氏替换原则指出 超类型的不变量必须保留在子类型中 我对这个原理和多态性的交叉特别感兴趣 事实上 特别是子类型多态性 参数多态性和 Haskell 类型类似乎就是这种情况 因此 我知道当函数的参数是逆变且返回类型是协变时 函数是子类型 我们
  • 为什么不允许 System.out.println(super) ?

    Why is System out println super 不允许 System out println this 这没问题并且this toString 自动调用并打印 当然 用实例变量代替也可以this 然而 this and su
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • jQuery 和面向对象的 JavaScript - 如何?

    我读了this http www sweetvision com 2009 07 07 how to use object oriented programming with jquery and this http archive plu
  • 如何在我的 HttpClient 执行器中遵循单一职责原则?

    我在用RestTemplate http docs spring io spring docs current javadoc api org springframework web client RestTemplate html as
  • OOP Javascript - 是否需要“获取属性”方法?

    给定一个非常简单的 js 对象构造函数及其原型 function MyTest name this name name MyTest prototype getName function var myName this name retur
  • 从关系数据库中“区分”对象

    我们的 win32 应用程序根据 MySQL 关系数据库中多个表中的数据组装对象 对于这样的对象 多个修订版本存储在数据库中 当存储某些内容的多个修订版本时 迟早您会问自己这样的问题 您是否可以想象两个修订版本之间的差异 所以我的问题是 比
  • Boost Python:多态容器?

    我有一个方法 或函数 它返回对多态对象列表的引用 class A class B public A std list
  • OOP概念混乱?

    在阅读一些编程书籍时 我注意到作者说 在OOP中 你在理解OOP的主要思想时可能会有些困惑 是啊 我有些困惑 您是否也有同样的情况 是什么让程序员 甚至是经验丰富的程序员 感到困惑 如果你拥有它 你怎么能打败这个 Thanks The An
  • UML 只能用于面向对象吗?

    目前 在我的论文期间 存在着关于 UML 是否仅用于 OO 开发 的激烈争论 我从一些来源进行了搜索 其中给出了很多关于它的论点 就我自己而言 我相信并非所有 UML 图都是专门为 OO 系统 软件开发而制作的 即 状态图 因此 我希望得到
  • 如果您不在 Java 中进行克隆,那么您会做什么以及如何称呼它?

    有没有人对 Java 中的复制构造函数 工厂方法等有任何建议或已建立的最佳实践和命名约定 特别是 假设我有一堂课Thing我想要一个返回新值的方法Thing与 a 具有相同的值Thing传入 如果是实例方法 则作为实例 您会将其作为构造函数
  • Java 中序列化的目的是什么?

    我读过很多关于序列化的文章 以及它如何如此美好和伟大 但没有一个论点足够令人信服 我想知道是否有人能真正告诉我通过序列化一个类我们真正可以实现什么 让我们先定义序列化 然后我们才能讨论它为什么如此有用 序列化只是将现有对象转换为字节数组 该
  • PHP:我是否将事件驱动编程与信号感知接口(信号和槽/观察者模式)混淆了?

    我看到很多人说 Symfony2 Zend Framework 2 等都是事件驱动的 在桌面世界中 通过事件驱动编程 我了解到应用程序每当其状态发生变化时都会通知其观察者 由于 PHP 应用程序是无状态的 因此无法执行此类操作 IE 让观察
  • 值类型如何实现引用类型

    我遇到了一个值类型正在实现 ref 的场景 类型 只是想知道这怎么可能 幕后发生了什么 结构体是值类型 接口是引用 类型但结构可以实现接口而不会出现任何错误 有什么想法吗 提前致谢 实际上 它同时以两种不同的方式进行 首先 任何值类型都可以

随机推荐

  • Smarty:评估存储在 PHP 变量中的模板

    我有一个 php 变量 其中包含 html smarty 代码 x a href link title a 该数据是从数据库中获取的 我想使用 smarty 对其进行评估并将输出放入 php 变量中 将其打印出来或再次将其保存到数据库中 T
  • GOOGLE_APPLICATION_CREDENTIALS 错误

    我正在尝试使用谷歌语音 API 将音频文件转换为文本 但遇到一些文档问题 我已启用语音 API 并创建了一个服务帐户文件 我还激活了服务帐户凭据 然后我编写了以下命令来使用我的服务帐户检索授权令牌 gcloud auth applicati
  • 如何在 React Native 上从 uri 获取图像的高度和宽度?

    因此 我尝试使用React Native提供的Image getSize函数 但是当我尝试在函数外部使用高度和宽度时 它似乎为零 这是我的代码 var theHeight 0 Image getSize url height width g
  • 使用 jquery ajax 调用 jsf 托管 bean 方法(AjaxBehaviorEvent 侦听器处理程序)

    我想知道是否有办法直接使用 jquery ajax 服务器请求来触发 jsf 托管 bean 方法 带有 AjaxBehaviorEvent 类型参数 使用 f ajax 时触发相同的方法 顺便说一下 我是 jsf 开发人员我没有找到关于使
  • 不同回文子串的数量

    给定一个字符串 我知道如何找到回文子串的数量使用 Manacher 算法在线性时间内完成 但现在我需要找到数量独特 独特回文子串 现在 这可能会导致 O n n 2 算法 一个 n 用于查找所有此类子字符串 而 n 2 用于将这些子字符串中
  • SQLite 中的 CEIL 和 FLOOR

    找到最干净的方法是什么ciel and floor中的一个数SQLite 不幸的是 SQLite 只有ROUND 功能 Formulas Ceil cast x as int x gt cast x as int 取x的整数部分 如果小数值
  • FileReader.readAsBinaryString 返回二进制还是基于 ASCII 的字符集?

    简而言之 我想将图像的二进制数据发送到我的处理程序 该处理程序将作为字节数组保存在数据库中 使用读取文件输入的值在我的 Javascript 中 我会得到如下输出 GIF89a 2c 3f Sma c T At X c 8 fj I Q q
  • 如何在 React.js 中修改现有的 PDF?

    我的反应状态数组中几乎没有值通过 props 传递给当前组件 但我不想像下面的代码中当前显示的那样显示 而是想使用文件系统中的 PDF 模板 因此 我的预期结果是能够在给定 x y 坐标的原始 PDF 副本上从状态 文本或图像 绘制给定数据
  • 多行之间的 SQLite SUM()

    我需要一些有关 Android 应用程序中的 SUM 功能的帮助 我有一张如下所示的表 我有需要SUM最后两条记录注释和最后一条带注释记录之间的数量 我需要对第 31 32 行和 33 行的数量求和 它将返回 90 我已经尝试过 SELEC
  • 为什么我不能将匿名类型作为参数传递给函数?

    我试图做类似下面的事情 但它不起作用 为什么 NET 不让我这样做 private void MyFunction var items whatever 从 Visual C 3 0 开始 在方法作用域中声明的变量可以具有隐式类型 var
  • tfs 服务器上身份验证失败

    我有一个非常奇怪的问题git bash在窗户上 当我在 Visual Studio 中工作时 使用存储在 tfs 服务器中的 git 存储库没有问题 我只是分支 承诺并推动 但是当我尝试在我的系统中执行相同的操作 获取 拉动 推送 时git
  • Ionic PWA 部署

    我正在尝试将 Ionic 2 项目的渐进式 Web 应用程序版本部署到 Heroku 但它似乎不起作用 我正在尝试使用 Ionic build browser prod 然后部署 www 文件夹 但我没有收到 Heroku 的任何响应 似乎
  • ClickOnce 认为 Windows 更新 KB5029649 之后有可用更新,即使没有可用更新

    你好 StackOverflow 社区 我在使用 ClickOnce 部署的 VB NET 应用程序时遇到了一个不寻常的问题 尽管没有发布任何最新更新 我们的一些用户仍会被提示更新应用程序 当他们继续进行时 它的行为就像是全新安装一样 会清
  • 在 FormInput 组件下方反应本机元素行

    我正在使用 React Native Elements 中的 FormInput 元素 它似乎在每个 FormInput 组件下方生成一条线 一个比另一个更微弱 表格如下
  • 在纯 NumPy 中重写 for 循环以减少执行时间

    I 最近询问有关尝试优化科学应用程序的 Python 循环的问题 https stackoverflow com questions 2586749 what is the most platform and python version
  • 现场(“点击”)和表演

    我有一个网格 有一列包含 a 带有一些附加信息的锚标记 a
  • 如何在内存中创建文件供用户下载,而不是通过服务器?

    有没有办法在客户端创建一个文本文件并提示用户下载它而无需与服务器进行任何交互 我知道我不能直接写入他们的机器 安全性和所有 但我可以创建文件并提示他们保存它吗 适用于 HTML5 浏览器的简单解决方案 function download f
  • PowerMock 何时新替代方案

    我不想再使用 powermock 了 因为junit5开始模拟静态类 所以我试图摆脱 powermock 方法 如您所知 您可以使用whenNew关键字创建类的实例 Junit5中对于whenNew有什么替代方案吗 这是我的代码的一部分 w
  • 在 PowerShell 中创建临时目录?

    PowerShell 5 引入了New TemporaryFile cmdlet https learn microsoft com en us powershell module microsoft powershell utility
  • 多态性的真正意义(用途)是什么

    我是面向对象编程的新手 虽然我明白什么是多态 但我无法得到它的真正用途 我可以有不同名称的函数 为什么我应该尝试在我的应用程序中实现多态性 经典答案 想象一个基类Shape 它暴露了一个GetArea方法 想象一个Square类和一个Rec