如何在C++中使用虚函数来实现多态行为?

2023-12-14

我对 C++ 的这些重要功能很陌生,我已经在这里阅读了有关这些主题的一些问题/答案,并用谷歌搜索了一些文档。但我仍然对此感到困惑......

如果有人能给我建议一些好的在线教程或书籍章节,让我轻松而缓慢地理解这个概念,并从基础开始,那就太好了。

另外,如果有人知道一些现有的练习材料,那就太好了。


这是我听过的对多态性的最好解释:

这个世界上有很多动物。他们中的大多数都会发出一些声音:

class Animal
{
public:
    virtual void throwAgainstWall() { };
};

class Cat : public Animal
{
public:
    void throwAgainstWall(){ cout << "MEOW!" << endl; }
};

class Cow : public Animal
{
public:
    void throwAgainstWall(){ cout << "MOOO!" << endl; }
};

现在想象一下,你有一个装着动物的大袋子,但你看不到它们。你只需抓住其中一个并将其扔到墙上即可。然后你听它的声音——这会告诉你它是什么动物:

set<Animal*> bagWithAnimals;
bagWithAnimals.insert(new Cat);
bagWithAnimals.insert(new Cow);

Animal* someAnimal = *(bagWithAnimals.begin());
someAnimal->throwAgainstWall();

someAnimal = *(bagWithAnimals.rbegin());
someAnimal->throwAgainstWall();

你抓住第一只动物,把它扔到墙上,你会听到“喵!” - 是的,那是猫。然后你抓住下一个,把它扔出去,你会听到“哞!”的声音。 - 那是牛。这就是多态性。

您还应该检查C++中的多态性

如果您正在寻找好书,这里有一些不错的书单:权威 C++ 书籍指南和列表

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

如何在C++中使用虚函数来实现多态行为? 的相关文章

随机推荐

  • 如何提高 Django 管理搜索中相关字段的查询性能 (MySQL)

    在 Django 中我有这个 模型 py class Book models Model isbn models CharField max length 16 db index True title models CharField ma
  • 如何让 OS X 识别驱动器号?

    我知道 异端 但我陷入了困境 我有很多使用绝对路径名的配置文件 这导致 OS X 和 Windows 之间不兼容 如果我能让 OS X 我敢打赌是两者中更灵活的一个 识别问 foo bar bim properties作为有效的绝对文件名
  • 在 Windows 上使用参数静默运行安装程序 (.exe)

    我有一个 Windows 安装文件 exe 用于安装软件 这是第三方可执行文件 在安装过程中 它需要特定的值并有一个 UI 我想以静默方式运行此 setup exe 无需任何手动干预 即使是提供参数值 在花了一些时间谷歌搜索该方法之后 我觉
  • 根据用户输入编写包含变量 WHERE 的查询

    我在查询时遇到问题 我希望它做的是检查每个变量是否存在 如果不存在则忽略它们 我还想在表格中显示结果 任何帮助将不胜感激 到目前为止我所拥有的 这是我的代码 目前 它返回一个包含数据库中所有结果的数组 但如果我将 WHERE 子句中的 OR
  • 如何从 WSDL URL 生成 WSDL 文件?

    我的问题是我创建了一个网络服务客户端wsimport当创建其服务对象时 由于 HTTPS 它失败了 如下所示 MyService Service service new MyService Service new URL https www
  • 检查 JSON 中是否存在对象

    我需要知道 JSON 字符串中是否存在某个对象 并根据该对象的存在执行不同的操作 如果它不存在 我想省略该对象 因为它会抛出 NullPonterException 我尝试过使用if但没有成功 有人可以告诉我如何检查对象的存在吗 先感谢您
  • Java WAR - 从外部 JAR 加载 Spring bean

    我想在我的 Spring MVC Web 应用程序 打包为 WAR 中加载一些带有注释的 Spring 框架 bean Service来自外部 jar 它负责访问数据库和位于类路径中在 WEB INF lib 下 如果可能的话 最好使用以下
  • Azure DevOps 存储库备份副本 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我们已经创建了存储库https dev azure com 运行良好 现在 我的经理希望定期获得该存储库的备份副本 我向经理解释说https dev
  • 将 div 内的图像与响应高度垂直对齐

    我有以下代码 它设置一个容器 当调整浏览器大小 以保持方形纵横比 时 该容器的高度随宽度而变化 HTML div class responsive container div class dummy div div class img co
  • 如何使用 Meteor 为 MongoDB 提供配置?

    The meteor命令都会启动 Meteor 和 MongoDB 我怎么有meteor启动 MongoDB 时执行与此命令等效的命令mongod profile 1 slowms 1 或者 meteor 使用的某个地方是否有 mongo
  • Symfony ChoiceType $choices - 标签和值交换

    交响乐2 8 2 根据 Symfony 文档 选择选项是一个数组 其中数组键是项目的标签 数组值是项目的值 http symfony com doc 2 8 reference forms types choice html choices
  • qsort 没有对字符串数组进行排序[重复]

    这个问题在这里已经有答案了 我尝试使用 qsort 对字符串数组进行排序 这是我的数组的内容 a orange apple mobile car 这就是我使用 qsort 的方式 int myCompare const void a con
  • 从命令行列出所有环境变量

    是否可以列出all来自 Windows 命令提示符的环境变量 相当于PowerShell的东西gci env or ls env or dir env Just do SET 你也可以做SET prefix查看名称以以下开头的所有变量pre
  • 使用导航菜单显示隐藏 html 代码/内容 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我有一个按点击付费 PPC 登录页面 该页面的顶部有一个菜单 主页 服务 关于 我不想有另外两个页面用于服务 关于 我只想更改内容并替换所有内容 包括和之后的内容div class i
  • 矩阵上的垃圾、索引和唯一(如何保持矩阵格式)

    在 8x8 矩阵上使用此方法 gt gt junk index unique data first Capture the index ignore junk gt gt data sort index Index data with th
  • 为什么Java中的String.hashCode()有很多冲突? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 为什么 String ha
  • 无法加载文件或程序集或其依赖项之一。该系统找不到指定的文件。 (GAC 不允许)

    我有一个 主 程序 它使用反射动态加载我自己的 plugin dll 文件 plugin dll 文件通过使用 Visual Studio 引用来引用第三方 device dll 只要 device dll 和 plugin dll 与 M
  • jQuery - 从文本区域选择所有文本

    我怎样才能做到当您在文本区域内单击时 它的整个内容都会被选中 最终 当您再次单击时 取消选择它 为了防止用户在每次尝试使用鼠标移动插入符号时选择整个文本时感到恼火 您应该使用focus事件 而不是click事件 以下内容将完成这项工作并解决
  • Mongoose 和引用 UUID 数组不转换

    使用 mongoose uuid 库时 我可以为模式设置 UUID 类型 因此当我读取数据时 它采用字符串 utf 8 格式 而当我保存数据时 它采用 UUID ObjectID BSON 类型 4 格式 这对于我的架构中的顶级或平面直接值
  • 如何在C++中使用虚函数来实现多态行为?

    我对 C 的这些重要功能很陌生 我已经在这里阅读了有关这些主题的一些问题 答案 并用谷歌搜索了一些文档 但我仍然对此感到困惑 如果有人能给我建议一些好的在线教程或书籍章节 让我轻松而缓慢地理解这个概念 并从基础开始 那就太好了 另外 如果有