在引用上调用虚函数

2023-11-29

在下面的代码中,为什么最后一次调用eat()关于参考c返回 ”动物 b 正在吃东西。“?据我了解,c是对实例的引用b派生类的Dog and eat()是一个虚函数。所以它应该已经返回“狗b正在吃东西。”

#include <string>
#include <iostream>

using namespace std;

class Animal
{

protected:
    string name;

public:
    Animal( string _name ):
    name(_name)
    {

    }

    virtual void eat()
    { 
        cout << "An animal " << name << " is eating." << endl;
    }
};

class Dog : public Animal
{

public:

    Dog( string _name ):
    Animal(_name)
    {

    }

    void eat()
    {
        cout << "A dog " << name << " is eating." << endl;
    }
};

int main( int argc , char ** argv )
{
    Animal a("A");
    a.eat();

    Dog b("b");
    b.eat();

    Animal & c = a;
    c.eat();

    c = b;
    c.eat();

    return 0;
}

这是输出:

An animal A is eating.

A dog b is eating. 

An animal A is eating. 

An animal b is eating.

Animal & c = a;
c.eat();

c = b; ///^^^
c.eat();

在 C++ 中,引用一旦初始化就不能重新绑定到其他对象。c仍然是对象的别名a,这是一个Animal,因此,您看到了预期的输出。

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

在引用上调用虚函数 的相关文章

  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • CSS 在移动浏览器中不起作用

    http mpkosis28 com 28cup 从笔记本电脑或台式机上查看时 该网站看起来很完美 但是当我尝试通过手机访问它时 它无法识别网站中的 css 文件 只加载 html 部分 阅读其他类似的问题 但他们似乎没有和我遇到同样的问题
  • Java String 上哈希码溢出的后果

    我最近在这里阅读了一些有关 Java String 类的哈希码的信息 但我一直无法找到此信息 当字符串的长度高于 32 时会发生什么 我知道会发生溢出 但作为哈希键 会发生什么 例如 我需要对长度在 20 到 120 个字符之间的字符串进行
  • .htaccess 中的 CodeIgniter 查询字符串重写

    当我第一次启动我的网站时 URL 采用以下格式 project php projectID 1 pageID 2 几年前 我修改了 htaccess 以重写它们以使用段 如下所示 project 1 2 我更新了所有内部链接以使用分段格式
  • 删除 Vuetify 中默认的 v-input-file 图标

    v file input是 Vuetify v2 中出现的新组件
  • 以编程方式切换键盘配置文件

    有什么方法可以让我们以编程方式切换已安装的键盘 无需手动进入设置部分 我的要求是向用户展示手机上安装的所有键盘 并获得一个选择器对话框以切换到想要的键盘 基本上我们想减少把他转移到设置页面的步骤 这段代码将满足您的要求 InputMetho
  • 为什么 Heroku 的 heroku-18 堆栈仅与 Puma 版本 3.7.x 兼容?

    通过反复试验 我确定从 Heroku 升级heroku 16堆叠到heroku 18stack 需要我在 Rails 应用程序中更新 Puma 下面是为 puma gem 构建本机扩展的失败 您能解释一下为什么 v3 7 之前的 puma
  • 将 tar/gzip 添加到 Windows 命令行

    正如标题所说 有人知道将 tar gzip 添加到 Windows 命令行的方法吗 我已经安装了 Cygwin 但不知道是否必须在 PATH 环境变量中添加一些内容才能将 tar 作为 cmd 选项 我用来解决这个问题的方法是安装 Cygw
  • 绘制矩形并填充外部边界

    我正在绘制一个矩形 并在矩形外部填充 我尝试了其中一些 但无法得到我所期望的完美的 这正是我所期望的 我试过 Point pTopLeft new Point Point pBotRight new Point pTopLeft x 100
  • PHP 标头重定向到具有时间间隔的多个 URL

    我可以使用 header 重定向到多个具有时间间隔的 URL 吗 假设我有 url1 和 url2 现在 我想要的是标头首先重定向到 url1 然后说 5 秒后 它会将我重定向到 url2 我有办法做到这一点吗 我尝试了下面的简单代码 但这
  • CarrierWave 和正确的文件扩展名取决于其内容

    如何使 CarrierWave 根据文件名添加正确的扩展名 其内容 例如 如果我上传文件 logo PNG文件 不带扩展名 CarrierWave 应将其保存为 logo png 文件 img gif 扩展名不正确的JPG文件 应分别保存为
  • 将向量插入矩阵的特定列

    如何将向量 b 插入到矩阵的 col 列中 我在 Fortran 中找不到插入或附加函数的任何语法 到目前为止 我所做的只是重新分配列中的值 但我只想插入向量 real M n n integer n col real b n M n co
  • Objective-C 2.0 和快速枚举抛出异常

    我有一个类似于以下内容的代码块 for NSDictionary tmp in aCollection if bar valueForKey id isEqualToString tmp valueForKey id break else
  • Mobile Jquery - 翻转效果

    请找到下面的网址 http jquerymobile com demos 1 1 0 docs pages page transitions html 如何在页面加载或 document onReady 上使用这些效果 在标准页面上从 jQ
  • 并发 HttpWebRequest 的限制

    NET 一次允许的并发 HttpWebRequest 数量是否有限制 我不确定overall限制 但是单个主机名的并发连接数肯定是有限制的 它可以配置在
  • glMultMatrix 在 glBegin() 内部不起作用

    我正在创建一个程序 允许我在 3 个空间中绘制点 使用 Catmull Rom 样条线连接它们 然后在样条线周围绘制一个圆柱体 我在用GL TRIANGLES STRIP以短间隔连接围绕样条线绘制的点的圆圈 希望将它们全部连接在一起形成围绕
  • Maven:在构建期间将资源从 jar 添加到 WEB-INF

    我想从依赖项 jar 添加资源 该依赖项位于myjar jar META INF 公共资源 myresource sk to my web应用程序 WEB INF myfolder在 mvn 打包目标期间 有谁可以提供建议 如何做到这一点
  • 创建一组匿名函数,其参数在定义时定义

    我正在尝试逐步重构现有代码 我定义了一组函数 它们仅在一个内部参数上有所不同 function loadGame1 void loadGame save1 function loadGame2 void loadGame save2 fun
  • 使用 Delphi6 将图像存储在 MS-Access 数据库中

    如何使用 Blob 数据类型在 MS Access 数据库中存储图像 我想使用记录类型来存储数据 那么 如何处理Record Type中的图像保存到数据库中呢 编辑 我想用图像存储数据 我有以下记录类型 type TPersonInfoRe
  • 如何在 Windows 上最大化窗口并禁用调整大小而不覆盖任务栏 - tkinter / tk-toolkit

    我使用 Tkinter 用 python 编写了一个应用程序 我希望它能够缩放并且不能调整大小 但是当我这样做时 它会隐藏我想保留的任务栏 有什么办法可以做到吗 from tkinter import root Tk root state
  • 在引用上调用虚函数

    在下面的代码中 为什么最后一次调用eat 关于参考c返回 动物 b 正在吃东西 据我了解 c是对实例的引用b派生类的Dog and eat 是一个虚函数 所以它应该已经返回 狗b正在吃东西 include