C++ 没有指针或引用的虚函数调用

2023-11-28

据我所知,虚函数调用通常需要指针或引用。所以我对下面的代码感到非常惊讶。

#include <iostream>
using namespace std;
class B{
public:
  void runB(){        call();  }
  virtual void call(){ cout<<"B\n"; };
};

class D: public B{
public:
  void runD(){       runB();   }
  void call(){       cout<<"D\n";  }
};

int main(){
 D d;
 d.runD();
}

输出是

D

有人可以评论一下为什么这个虚拟函数调用有效吗?谢谢。


在成员函数内,对其他成员函数或变量的任何引用都通过隐式解析this指针。所以在定义中runB(), the call()真正意思this->call()。虚函数调用是使用当前对象的虚表来执行的。

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

C++ 没有指针或引用的虚函数调用 的相关文章

  • 这种双重实例是否有害,或者根本没有必要?

    在仔细阅读遗留资源时 我发现了这一点 DataSet myUPC new DataSet myUPC dbconn getDataSet dynSQL Resharper 正确地将其中的 new Dataset 部分 灰显 并建议 删除多余
  • 如何使用带有进度条的 HttpClient 下载文件?

    我创建了一个名为SiteDownload并添加了一些下载图像的链接 using System Collections Generic using System Linq using System Net using System Threa
  • 有没有办法将所有内容都包含在 dbcontext 中?

    当查询一个DbContext急切加载时 需要Include Navigation 为了填充导航属性 然而 在某些情况下 我想简单地Include all实体的导航属性 有没有办法做到这一点 或者有办法做到这一点 我假设你可以反思 但我宁愿避
  • 井字游戏代码有助于改进

    这是我必须检查玩家在井字棋游戏中获胜的代码 这是一个很长的 if 语句 可以改进 该板由 9 个图片框组成 我是一名 C 初学者 pBox Image Player players Player playerTurn getImage ch
  • C++,多语言/本地化支持

    向 C 程序添加多语言支持的最佳方法是什么 如果可能 应该从包含键值对 WelcomeMessage Hello s 之类的纯文本文件中读取语言 我想到了添加一个 localizedString key 函数来返回加载的语言文件的字符串 有
  • 从数组中输入多个数字,每个数字检查是否为整数

    每个人 我希望有人能帮我弄清楚C语言的一些东西 这是我第一次认真地做IT方面的作业 我没有经验 而且我正在电子学习中学习 所以老师的帮助不是很好 我需要用C语言开发控制台应用程序 用户需要输入10个整数 如果插入的数字不是整数 需要输出错误
  • lambda 表达式到函数指针的转换

    这是这个问题的后续问题 Lambda 如何作为参数传递 https stackoverflow com questions 3321283 c0x lambda how can i pass as a parameter 据推测 MSDN
  • 找不到 HttpContextBase 命名空间

    public string GetCartId HttpContextBase context if context Session CartSessionKey null if string IsNullOrWhiteSpace cont
  • 公共领域有哪些替代方案?

    我正在用 java 编写一个游戏 正如问题标题建议的那样 我在类中使用公共字段 暂且 据我所知 公共领域很糟糕 我有一些理解其中的原因 但如果有人能澄清为什么你不应该使用它们 那将不胜感激 问题是 从我所看到的来看 这似乎是合乎逻辑的 是使
  • 如何使用 C# 调用 REST API?

    这是我到目前为止的代码 public class Class1 private const string URL https sub domain com objects json api key 123 private const str
  • 有没有办法关闭 Hangfire 使用 Serilog 进行的日志记录?

    有没有办法关闭 Hangfire 使用 Serilog 进行的日志记录 我们正在使用我们自己的抽象 我不希望在使用 Serilog 时来自 Hangfire 记录器的所有额外噪音 INIT call under web project na
  • 泛型类上的 DebuggerDisplay

    我在应用时遇到问题DebuggerDisplay泛型类的属性 DebuggerDisplay foo class Foo DebuggerDisplay Bar t class Bar
  • 具有多重继承的不明确基数

    我正在尝试在一个大库中编写一些类的子类 我收到 基础不明确 错误 这是该问题的一个可编译示例 include
  • 访问结构向量

    我有一个结构 struct OutputStore int myINT string mySTRING 如果我创建一个 OutputStore 类型的数组 如下所示 OutputStore OutputFileData new Output
  • C++头文件问题

    我在处理类时尝试了一些 C 代码 这个问题出现在我身上 并且让我有点烦恼 我创建了一个包含类定义的头文件和一个包含实现的 cpp 文件 如果我在不同的 cpp 文件中使用此类 为什么要包含头文件而不是包含类实现的 cpp 文件 如果我包含类
  • 通过 MVC 将数据写入数据库的最佳方法是什么?

    我正在使用 MVC 和 EF Core 开发一个家庭作业项目 我正在寻找将数据写入数据库的最佳方法 我是初学者 有两张桌子 Predbilje ba 报名 和Seminari 研讨会 public class Predbilje ba Ke
  • C# 的 xml 序列化中是否有一个属性可以跳过空数组?

    C 的 xml 序列化中是否有一个属性可以跳过空数组 这将提高 xml 输出的可读性 好吧 你也许可以添加一个ShouldSerializeFoo method using System using System ComponentMode
  • 将 .NET 类库(主要定义 CRUD 操作)公开为服务

    公开现有内容的最佳 有效和最快的方法是什么 类 图书馆 主要定义 CRUD 操作 作为service 周转基金服务 or WCF数据服务 以便它可以与银光 or Ajax 在那儿tools 代码生成器 RAD 工具 哪些可以支持这个 预先感
  • 在 C++17 中编译具有非固定基础类型的 constexpr 从 int 静态转换为作用域枚举的未定义行为

    我想知道以下内容是否应该在 C 17 中编译 enum class E A B constexpr E x static cast
  • int 类型的构造函数

    考虑到成本 这些情况是否相同 case 1 int a 5 case 2 int a 5 case 3 int a a 5 这三种语法是不同的 请耐心等待 我使用用户定义类型而不是 int 稍后我将回到 int T a 5 Direct i

随机推荐

  • 在 Windows Azure 上运行 Fleck(或任何)Websocket 服务器

    我想在 Azure 中以辅助角色运行 WebSocket 服务器 这在模拟器本地工作得很好 但是第一次运行套接字服务器时会出现 Windows 防火墙提示 我想知道是否有人知道如何克服 Azure 上套接字的连接问题 我的套接字服务器实现
  • 从嵌套文件夹导入模块[重复]

    这个问题在这里已经有答案了 我有这样的文件夹结构 main folder done test1 init py check py init py class Tries object def init self print Test 检查
  • 如何在 iframe 中查找 div

    我正在尝试使用 jquery 在 iframe 中查找 div 有没有比我下面使用的方法更好的方法 Iframe contents find MyDiv function atmslidein customer ready function
  • Flex 的 FXG 编辑器

    我见过的唯一适用于 Flex 的 FXG 编辑器是由 7jigen 制作 在线工作或 作为 Flex 应用程序 有人知道另一种吗 我认为它可以在 Illustrator 中完成 但这并没有真正提供简单的导出到 Flex 类型选项 只是给出坐
  • 使用方法引用进行混淆后,会出现 NoSuchMethodError 崩溃

    编译 proguard之前的源代码 public class IntentSession extends BaseIntentSession Override public void onResume super onResume mExe
  • 如何检索模块的路径?

    我想检测模块是否已更改 现在 使用 inotify 很简单 您只需要知道要从中获取通知的目录即可 如何在 python 中检索模块的路径 import a module print a module file 实际上会给你加载的 pyc 文
  • Delphi TPath.GetTempPath 结果被裁剪

    我正在使用 Delphi 2010 我的程序想要获取系统的临时路径 我正在使用 TPath GetTempPath 并且一切正常 至少对于我和我的同事来说 但在某些客户计算机上 此方法返回 当然 不存在的裁剪路径 我发现问题似乎是对 Get
  • 我可以在 Google App Engine(标准环境)中使用 Goroutines 吗?

    下面的例子似乎可行 但是使用安全吗 我的目标是进行一些非常轻的后台处理 而实际的任务队列作业感觉太繁重 func MyHandler w http ResponseWriter r http Request go func do somet
  • REST 复杂/复合/嵌套资源 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在尝试解决基于 REST 的 API 中的概念的最佳方法 不包含其他资源的扁平资源没有问题 我遇到麻烦的是复杂的资源 例如 我有一本漫画书的资源 ComicBook上面有各种
  • 不平衡数据和加权交叉熵

    我正在尝试使用不平衡数据训练网络 我有 A 198 个样本 B 436 个样本 C 710 个样本 D 272 个样本 我已经阅读了有关 weighted cross entropy with logits 的内容 但我找到的所有示例都是用
  • TableRow 跨度不适用于动态添加的行

    我在将行动态添加到滚动视图内的 TableLayout 时遇到以下问题 这些行遵循以下模式 第 1 行 单元格横跨整个表格第 2 行 两个单元格第 3 行 单元格横跨整个表格 N 行 两个单元格 问题在于 具有一个单元格跨越该行的行实际上根
  • 重写 ApplicationRecord 初始化,是个坏主意吗?

    我正在创建一个foo像这样的对象 foo Foo new foo params foo bar Bar where name baz first or create 但我还需要其他对象来执行此操作 所以 我想到了重写Foo初始化方法执行如下
  • 如何在运行时从一个应用程序切换到另一个应用程序

    是否有可能使用 Appium 在运行时从一个应用程序切换到另一个应用程序 Thanks 终于我找到了准确的答案 希望它对某些人有用 source https www linkedin com grp post 6669152 6027319
  • 如何在执行某个动作后自动触发回车键按下事件?

    I m writing some unit test in my web apps and I want to automatically trigger an Enter key pressed event from my page af
  • 是否有维护插入顺序的 IdentityHashMap 实现?

    我需要一个 HashMap 1 通过对象引用匹配键 并且 2 迭代时保持插入顺序 这些功能分别在 IdentityHashMap 和 LinkedHashMap 中实现 有没有办法获得适合我需要的数据结构 Java 标准或第 3 方库 如
  • Angular 6 中 MatDialog 关闭且数据库中的数据更新后如何刷新组件?

    我正在学习 Angular 6 的 MEAN 堆栈应用程序 在这里 我想在添加新的客户端 汽车 司机 预订或更新新的客户端 汽车 司机 预订后刷新组件 但是添加新值后 显示所有值的组件不会更新或刷新 当时无法看到当前值 但是当我在组件之间路
  • 什么是伞头?

    伞头基本上是什么 它有什么用 我收到如下所示的警告 这是什么意思
  • 什么是 UnsafeMutablePointer?如何修改底层内存?

    我正在尝试使用 SpriteKit 的SKMutableTexture类 但我不知道如何工作UnsafeMutablePointer lt Void gt 我有一个模糊的想法 它是指向内存中一系列字节数据的指针 但我该如何更新呢 这在代码中
  • 获取对象名称和函数名称

    这实际上是2个问题 1 有没有一种通用的方法来获取实例的类名 所以如果我有一个类 class someClass object 我想要一种内置的方式来给我一个字符串 someClass 2 与函数类似 如果我有 def someFuncti
  • C++ 没有指针或引用的虚函数调用

    据我所知 虚函数调用通常需要指针或引用 所以我对下面的代码感到非常惊讶 include