C++:调用派生类的虚函数

2023-11-29

假设我有一个带有虚函数的类和一个以不同方式实现该虚函数的派生类。假设我还有一个用于存储派生类的基类向量。如果事先不知道派生类是什么,我将如何在向量中执行派生类的虚函数?说明问题的最少代码:

#include <iostream>
#include <vector>

class Foo {
public:
    virtual void do_stuff (void) {
        std::cout << "Foo\n";
    }
};

class Bar: public Foo {
public:
    void do_stuff (void) {
        std::cout << "Bar\n";
    }
};

int main (void) {
    std::vector <Foo> foo_vector;
    Bar bar;

    foo_vector.resize (1);
    foo_vector [0] = bar;

    bar.do_stuff ();            /* prints Bar */
    foo_vector [0].do_stuff (); /* prints Foo; should print Bar */
    return 0;
}

你不能。向量中的对象将是sliced-- 任何派生类实例数据都将被截断,因此调用该方法将是一个非常糟糕的主意。

另一方面,如果你有一个向量pointers到基类,然后您只需调用虚拟方法,并且将调用派生类版本。

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

C++:调用派生类的虚函数 的相关文章

  • 错误:表达式不可赋值三元运算符

    我有以下代码 MPLABX XC8 编译器给出此错误 错误 表达式不可分配 U1ERRIRbits RXFOIF uart1 oerr 1 uart1 oerr 0 这是相关代码部分 typedef union struct bool fe
  • 带有 ASP.NET 按钮回发的 jQuery UI 对话框

    我的 ASP NET 页面上有一个运行良好的 jQuery UI 对话框 jQuery function jQuery dialog dialog draggable true resizable true show Transfer hi
  • 在 LINQ 查询中进行转换

    是否可以在 LINQ 查询中进行强制转换 为了编译器的缘故 下面的代码并不糟糕 但最好将其放入一个查询中 Content content dataStore RootControl as Controls Content List
  • copy_from_user() 错误:目标大小太小

    我正在为内核模块编写 ioctl 处理程序 我想从用户空间复制数据 当我编译禁用优化的代码时 O0 gflags 编译器返回以下错误 include linux thread info h 136 17 error call to bad
  • 非模板函数中的尾随返回类型[重复]

    这个问题在这里已经有答案了 我见过有人使用以下语法来实现函数 auto get next gt int 代替 int get next 我理解两者 并且我知道尾随返回类型语法对于使用 decltype 的模板代码很有用 就我个人而言 我会避
  • 并行运行多个任务

    我有一个代理列表 每个代理都会访问不同的站点并从站点中提取所需的数据 目前它一次只做一个 但我希望同时运行 10 20 个任务 这样它就可以一次性从 20 个站点下载 而不是只下载一个 这是我目前正在做的事情 private async T
  • SOAP Web 服务:多台服务器,一个接口

    我有一个场景 需要任意数量的服务器来提供相同的 SOAP Web 服务 我想生成一组代理类 并能够为它们提供一个位置 以便在运行时将它们指向不同的服务器 不幸的是 看起来好像wsdl port节点 子节点wsdl service 要求对特定
  • CMake(Ninja 后端)使用 /MT 编译

    我有一个类似的问题CMake 使用 MT 而不是 MD 进行编译 https stackoverflow com questions 14172856 cmake compile with mt instead of md但有一些差异 我正
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width
  • 如何在 C 中链接目标文件?失败并显示“架构 x86_64 的未定义符号”

    因此 我尝试在我的文件 file2 c 中使用另一个 C file1 c 文件中定义的函数 为了做到这一点 我包含了 file1 file1 h 的标头 但是 每当我尝试使用 gcc 编译文件时 我都会收到以下错误 Undefined sy
  • 使用 STL 流时如何格式化我自己的对象?

    我想将我自己的对象输出到 STL 流 但具有自定义格式 我想出了这样的东西 但由于我之前从未使用过 locale 和 imbue 所以我不知道这是否有意义以及如何实现 MyFacet 和operator 所以我的问题是 这是否有意义以及如何
  • 如何在 C++ 中正确使用 cin.fail()

    我正在编写一个程序 从用户那里获取整数输入cin gt gt iUserSel 如果用户输入一个字母 程序就会进入无限循环 我试图用下面的代码来阻止这种情况 但程序进入无限循环并打印出 错误 输入 我该如何修复我的程序 cin gt gt
  • 使用任一默认捕获模式时,这是通过复制捕获还是 (*this) 通过引用捕获?是一样的吗?

    当我看到以下工作时我有点困惑 struct A void g void f g 但后来我发现this https stackoverflow com a 16323119 5825294答案非常详细地解释了它是如何工作的 本质上 它归结为t
  • fgets溢出后如何清除输入缓冲区?

    当输入字符串超出其预定义限制时 我遇到了 fgets 的小问题 以下面的例子为例 for index 0 index lt max index printf Enter the d string index 1 if fgets input
  • 为什么这个位图图像在加载后会改变大小?

    快速提问 我有这个1000 1000位图图像 我使用这个例程来加载它 private BitmapSource initialBitmap new BitmapImage new Uri C Users Desktop Original b
  • g++ / gcc 是否支持 C++20 新的atomic_flag 功能?

    根据参考参数 https en cppreference com w cpp atomic atomic flag c 20 有丰富的 对我来说有用的 支持atomic flag运营 然而 目前尚不清楚 gcc 是否支持这些功能 它们在任何
  • 重写 PyGObject 中的虚拟方法

    我正在尝试实施高宽几何管理 http developer gnome org gtk3 3 2 GtkWidget html geometry management在 GTK 和 Python 中用于我的自定义小部件 我的小部件是来自的子类
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que

随机推荐

  • 从 XSLT 2 中元素值的语义层次结构创建父子元素

    我在 XML 内容中有一系列 P 标记 它们在其初始值内具有语义层次结构 但是 P 标记是线性的 寻找 XSLT 2 转换 语义层次如下 1 a I A 正则表达式序列如下
  • 何时使用 PerThreadLifetimeManager?

    我按照下面链接的示例来设置 Unity 以与我的服务层一起使用 我的项目的设置与本文中的项目非常相似 我了解一切 除了到底为什么PerThreadLifetimeManager注册服务依赖项时使用 请记住 我还使用了也在我的服务层中使用的通
  • Python 目录中的最新文件

    我正在编写一个脚本 试图列出以 xls 结尾的最新文件 这应该很容易 但我收到了一些错误 Code for file in os listdir E Downloads if file endswith xls print file new
  • 为什么manage.pysyncdb无法连接到google云sql数据库?

    在最近更新 Google App Engine 上的应用程序期间 我正在使用以下内容更新数据库 SETTINGS MODE prod manage py syncdb 我上次运行它时有效 但现在我收到以下错误 Traceback most
  • 如何在 PHP 中检查数据是否为空或空格

    我有一个需要用户名的输入字段 场景是 我如何防止用户在该字段中提供空格 我已经添加了required在输入字段中 这样我可以防止用户将其留空
  • 用正在呈现的控件完全替换 ItemsControl ContentPresenter

    我正在使用 ItemsControl 根据我的模型生成控件列表 在查看可视化树时 我注意到每个渲染的控件都包装在 ContentPresenter 中 添加的控件是第 3 方控件 旨在在每个控件之间显示分隔符 如果它们是同级控件 这允许用户
  • Excel 文件被覆盖而不是连接 - Python - Pandas

    我正在尝试使用以下脚本将其中的所有 Excel 文件和工作表合并为一个 它有点工作 但随后 Excel 文件 c xlsx 被每个文件覆盖 因此只有最后一个 Excel 文件被连接 不知道为什么 import pandas as pd im
  • grails 模板 - 脚手架控制器

    我是 grails 的新手 我现在正在研究我的脚手架模板 特别是我的控制器 每次生成它时我都想要一个定制的控制器 所以我使用了 安装模板 我总是在控制器上创建一个命令对象 是否可以将域类中的字段包含到生成的控制器中的命令对象中 我知道我必须
  • Java - 如何从哈希图中找到最接近特定数字的值?

    嗨 我有一个HashMap
  • Javascript:使用 setTimeout 重试的函数

    我有一个函数downloadItem由于网络原因可能会失败 我希望能够在实际拒绝该项目之前重试几次 重试需要超时 因为如果出现网络问题 则立即重试是没有意义的 这是我到目前为止所拥有的 function downloadItemWithRe
  • 这段 javascript 行中的冒号 (:) 是什么意思?

    下面第3 6行中的 是什么意思 function displayError error var errorTypes 0 Unknown error 1 Permission denied 2 Position is not availab
  • 使用 Asynctask 在列表视图中显示数据

    我成功在列表视图中显示了来自 Web 服务 JSON 的数据 但我想添加 Asyntask 我可以在我的代码中放置代码 Asyntask 的位置 这是我的代码 用于在列表视图中显示数据 public class Jadwal remix e
  • JQuery 数据表中的 TableTools 导出不起作用

    我已经为此苦苦挣扎了两天 我已经在数据表论坛上发帖了 但没有得到回复 所以我希望这里的社区能够提供帮助 我在这里阅读过有关此问题的类似帖子 但正如许多帖子所建议的那样 我已经使用了 sSwf 的正确路径 出现导出按钮并加载所有资源 但是 单
  • UITableViewCell 无法用一根手指点击来点击,但可以用两根手指点击

    我创建了一个表视图 并且 tableViewCell 无法用一根手指单击 但是当我尝试用两根手指单击 tableViewCell 时 会发生单击事件 我不知道为什么会出现这种情况 我在 tableView 中创建了一个自定义单元格 Invi
  • 将公式转换为 CNF

    有没有办法使用 z3 将公式转换为 CNF 使用 Tseitsin 式编码 我正在寻找类似的东西simplify命令 但保证返回的公式为 CNF 您可以使用apply命令来执行此操作 我们可以为该命令提供任意战术 策略 有关 Z3 4 0
  • Crystal Reports 打印纵向而不是横向

    我在 SAP Crystal Reports 14 1 4 1327 中创建了一个非常简单的测试报告 rpt 文件 我在页面设置中将页面方向设置为横向 如果我从 Crystal Reports Designer 打印文档 它将以横向方式正确
  • 如何在Form1、WinForms C#中使用Form2的变量?

    我在 Visual Studio 2013 中有一个解决方案 其中包含两个表单 我想要当在 Form2 中按下按钮时 变量flag fb已更新 我在 Form1 中使用它的值 有什么办法可以做到这一点吗 谢谢 方法一 使用参数化构造函数在表
  • Android:PatternSyntaxException:语法错误 U_ILLEGAL_ARGUMENT_ERROR

    我在用着json io将一些 JSON 数据转换为 Java 对象 DataTransferContainer dataTransferContainer DataTransferContainer JsonReader jsonToJav
  • 使用 gnuplot 绘制两个相邻的“带框”图

    我试图将两个数据系列绘制在一张图中 作为 gnuplot 中的方框 该脚本目前如下所示 set terminal postscript eps enhanced color set title Distribution of the ext
  • C++:调用派生类的虚函数

    假设我有一个带有虚函数的类和一个以不同方式实现该虚函数的派生类 假设我还有一个用于存储派生类的基类向量 如果事先不知道派生类是什么 我将如何在向量中执行派生类的虚函数 说明问题的最少代码 include