C++纯虚函数有函数体[重复]

2024-01-04

纯虚函数(当我们设置= 0) 也可以有一个函数体。

如果纯虚函数根本不会被调用,那么为它们提供函数体有什么用呢?


您认为无法调用纯虚函数的假设是绝对错误的。当一个函数被声明为纯虚函数时,它仅仅意味着该函数无法被调用动态地,通过虚拟调度机制。然而,这个完全相同的函数可以很容易地被调用静态地, 非虚拟的, directly(没有虚拟调度)。

在 C++ 语言中,当调用中使用函数的限定名称时,即当调用中指定的函数名称具有<class name>::<function name> form.

例如

struct S 
{
  virtual void foo() = 0;
};

void S::foo() 
{
  // body for pure virtual function `S::foo`
}

struct D : S 
{
  void foo() 
  {
    S::foo();       
    // Non-virtual call to `S::foo` from derived class

    this->S::foo(); 
    // Alternative syntax to perform the same non-virtual call 
    // to `S::foo` from derived class
  }
};

int main() 
{
  D d;

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

C++纯虚函数有函数体[重复] 的相关文章

  • 什么可能导致 sock send() 命令上的“资源暂时不可用”

    什么会导致Resource temporarily unavailable套接字上的错误send 命令 套接字设置为AF UNIX SOCK STREAM 它在大多数情况下都有效 但偶尔会出现此错误 套接字的接收端似乎工作正常 我知道这不是
  • 使用和重载基类的模板成员函数?

    下面 构造Y超载X的成员函数f 两个重载都是模板函数 但采用不同的参数 typename and int 明确指定 struct X template
  • boost::noncopyable 是如何工作的

    我在 C 实践中偶然发现了两个愚蠢的问题 据我所知 c 中的复制构造函数和赋值运算符不是继承的 那么 boost noncopyable 在这种情况下如何帮助禁止这些东西呢 class X private boost noncopyable
  • 为什么要在 C 和 C++ 项目中创建 include/ 目录?

    当我处理我的个人 C 和 C 项目时 我通常把file h and file cpp在同一目录中 然后file cpp可以参考file h with a include file h 指示 然而 通常会发现库和其他类型的项目 如 linux
  • 在 UserControl C# .NET 中添加/停靠控件

    我正在编写一个 UserControl 它以编程方式添加子控件 目前我正在添加新的控件 如下所示 this Controls Add new Control Height 16 Dock DockStyle Top 我遇到的问题是新控件添加
  • 为什么 VS 2008 在 Intellisense 中不显示 String 类的扩展方法

    由于 String 实现了IEnumerable
  • 使用自定义对象的动态列表并且无法动态更改dataGrid的单元格属性

    我刚开始在 Stack 上发帖 我已经搜索了很长一段时间来解决与我类似的问题 我试图根据对象的布尔值动态地将 WinForms DataGridView 中的复选框从非只读更改为只读 它在调试模式下显示更改已经发生 但是一旦完全运行 应该只
  • 编译器错误? g++ 允许可变大小的静态数组,除非函数是模板化的

    下面的代码演示了我无法解释的 gcc 4 6 2 的行为 第一个函数声明一个 vec t 类型的静态数组 其中 vec t 是 unsigned char 的 typedef 别名 第二个函数是相同的 只是 vect t 的类型是模板参数
  • C++ 中的结构填充

    如果我有一个struct在 C 中 有没有办法安全地将其读 写到跨平台 编译器兼容的文件中 因为如果我理解正确的话 每个编译器都会根据目标平台进行不同的 填充 不 那是不可能的 这是因为C 在二进制层面缺乏标准化 Don Box http
  • WCF:通用接口的序列化可能吗?

    我正在尝试实现一个服务契约 其中包含一个采用通用接口的方法 并且该通用接口本身被赋予一个接口参数 我用 ServiceKnownType 装饰了服务接口 用常规 KnownType 装饰了服务实现 并用常规 KnownType 装饰了数据契
  • 对双向链表进行排序 C++

    尝试通过遍历列表的循环来完成此操作 在循环中 我将头节点输入到我定义的排序函数中 然后使用 strcmp 来确定节点中的哪个名称是否应该排在前面 它不起作用 因为写得太早了 我通过一次沿着列表一个节点进行线性比较 而不是回去查看第一个节点是
  • 查询 XmlDocument 而不会出现“命名空间前缀未定义”问题

    我有一个 Xml 文档 它定义并引用了一些命名空间 我将其加载到 XmlDocument 对象中 据我所知 我创建了一个 XmlNamespaceManager 对象 用于查询 Xpath 问题是我收到命名空间 my 未定义的 XPath
  • Docker 在 VS 中运行,但发布到 AWS 时出错?错误 CS5001:程序不包含适合入口点的静态“Main”方法

    我安装了适用于 Visual Studio 2017 V15 7 3 的 AWS 工具包 并使用 API 模板和 Linux docker 支持创建了一个新的空 Asp Net core 2 1 项目 我可以在 Visual Studio
  • C# 中的任意精度小数?

    是否存在任意精度decimal类可用于 C 吗 我见过几个任意精度整数类 但这并不完全相同 您可以使用 J 库java math BigDecimal类 如果已安装 只需添加一个引用即可vjslib me remembers one of
  • 使用 C# winforms 与 Windows 中的其他桌面应用程序交互

    我想知道是否可以与使用我的程序的其他程序进行交互 例如 单击另一个程序上的按钮等 我不确定这是否可能 但如果可能的话 有人可以提供一些 C 示例代码 Thanks 您可以创建消息并将其发送到其他进程 为此 您必须在 C 代码中使用 P In
  • 传递给 WCF 服务的可选查询字符串参数

    我想知道如何使用 string limit WebOperationContext Current IncomingRequest UriTemplateMatch QueryParameters Limit 在我的wcf中这个方法 Cit
  • MVC - 从视图调用控制器

    我是 MVC 新手 我正在使用 MVC 开发一个 Web 应用程序 该应用程序仅包含一个页面 所以在这个视图中我必须填充多个数据 假设应用程序是 新闻提要 应用程序 我需要填充最近的新闻 您喜欢的新闻 您朋友推荐的新闻等 那么我应该从视图到
  • 如何隐藏鼠标光标?

    我想问是否有人可以为我提供一个 C 代码 在其中我可以在按下特定键时隐藏 显示鼠标指针 我发现一些只为 TURBO C 编写的代码 它们都不能使用 dev c 甚至 Visual c 编译和运行 我尝试运行在 Dev C 中找到的代码 但我
  • 在 Outlook 中检索当前电子邮件正文

    在我的 Outlook 插件中 我想在功能区上添加一个按钮 因此当用户单击此按钮时 我想检索当前选定的电子邮件的正文 我有此代码 但它只检索收件箱中的第一封电子邮件 因为索引为 1 Microsoft Office Interop Outl
  • Xamarin - iOS 地图上的多个多边形

    我目前正在关注this https developer xamarin com guides xamarin forms application fundamentals custom renderer map polygon map ov

随机推荐

  • Javascript TCP 连接到服务器

    我创建了服务器守护进程 它生成一些数据 例如消息等 但是 我感兴趣的是 客户监控 例如 我有网页 我需要与服务器建立持久的 Tcp 连接并将所有传入数据显示到文本框中 我知道可以用 flash 来完成 但我正在寻找 JS 实现 这可能吗 最
  • 如何防止我的启动器被操作系统杀死?

    我正在做一个第三方Android启动器的项目 我发现它在后台运行时经常被操作系统杀死 即使它是默认的启动器 当可用内存不足时 操作系统会杀死许多应用程序 我猜这就是我的启动器被杀死的原因 所以我的问题是我应该怎样做才能减少被杀的机会 没有什
  • 在psql中定义多行字符串

    我想粘贴 123 456 789 into psql并将多行字符串存储在某个变量中 即 str 供以后使用 那可能吗 现在我得到了unterminated quoted string error 有点笨重 但你可以用 gset http w
  • Flask-SQLAlchemy db.create_all() 得到了意外的关键字参数“app”

    我正在遵循使用 Flask SQLAlchemy 创建 Flask 应用程序的教程 但是 在创建数据库时它开始引发错误 如何创建数据库 from flask import Flask from flask sqlalchemy import
  • Webflux 反应式 API 的 Spring Cloud 合约

    我正在尝试将 Spring Cloud Contract 应用于使用 Spring Webflux 构建的反应式 API 基本上能够发送 Flux 并从 API 接收响应 Flux 格式如下 RequestMapping endlessec
  • Rails 中的 pluck 和collect 有什么区别?

    这是两个示例代码 第一个与collect User first gifts collect id 第二个与pluck User first gifts pluck id 他们之间在性能或其他方面有什么区别吗 pluck是在数据库级别 它只会
  • Joomla 2.5超级管理员无法编辑前端

    我使用超级管理员用户登录前端 后端用户参数上只有超级管理员框提示 但文章附近没有显示任何小编辑图标 后端是否有某个技巧可以阻止前端版本 谢谢 这就是我为解决问题所做的事情 我替换了自定义模板中的文件夹 文章 templates templa
  • 静态事件处理程序和非静态事件处理程序有什么区别

    这两者有很大区别吗 从语义上讲 没有区别 但是使用静态事件处理程序可能 如果不小心的话 导致内存泄漏 看本文 http msdn microsoft com en us library ee658248 aspx了解更多信息 我自己也遇到过
  • 连接到 MQ 时出现错误“2035”(“MQRC_NOT_AUTHORIZED”)

    我在连接到 IBM MQ 时收到此错误 我知道这是因为特权 但是有什么方法可以检查与 IBM MQ 的连接吗 请建议 2035 表明您的连接正在连接到 QMgr 如果您的通道名称 主机或端口错误 您将返回 2059 2035 表示连接已到达
  • 如何通过 USB 将击键从一台计算机发送到另一台计算机?

    有没有办法使用一台计算机通过 USB 将击键发送到另一台计算机 我想要做的是捕获键盘使用的 USB 信号 例如使用 USBTrace 并将其与 PC 1 一起使用以将其发送到 PC 2 以便 PC 2 将其重新识别为常规键盘输入 一些能做到
  • jQuery 航点插件

    你好吗 当我向下滚动页面时 我使用粘性元素的路径点插件 不过 我希望在页面的某个位置删除粘性元素 比如说距离起始滚动点 30px 然后当用户向上滚动页面时 粘性元素将其带回到其原始起点 JavaScript function Do our
  • 使用 dotnetRDF 查询 dbpedia sparql 端点 - RDFParseException

    当我执行以下查询时http dbpedia org sparql http dbpedia org sparql使用 dotnetRDF VDS RDF Query SparqlRemoteEndpoint QueryWithResultS
  • 在sharepoint中按组获取用户

    谁能告诉我如何使用 sharepoint 获取某个组内的用户 所以我有一个包含用户和 或组的列表 我想检索该列表中的所有用户 有没有办法区分列表项是组还是用户 如果它是一个组 我需要获取该组内的所有用户 我正在使用 C 我正在尝试通过使其成
  • 如何根据请求正文使用 HAProxy 路由流量(反向代理)

    我尝试根据下面的 POST 正文中标识的 URL 将以下请求路由到适当的服务器 我希望通过使用 HAProxy 的反向代理来完成此任务 例如 我想将所有请求定向到 HAProxy 然后让 HAProxy 检查 POST 正文中是否存在某些值
  • Rails 2.3 中的响应中是否可以省略 set-cookie 标头?

    假设某些操作只需要返回 xml 或 json 并且它们不应该发送供浏览器使用的 cookie 内容 AFAIK 这是 Rails 3 中金属的一个用例 但在 2 3 中是否可行 除了机架级别 None
  • 更改 LinearLayout 中分隔线的颜色

    我可以知道如何更改分隔线的颜色吗LinearLayout
  • 如何使用 http 上的智能协议(原始)获取 git 对象?

    我正在尝试使用 git 智能协议通过 http 从 github com git git 获取标签 v2 4 2 的注释 获取引用 curl H User Agent git 1 8 1 v https github com git git
  • PHP MYSQL -> 显示从 MYSQL 数据库保存为“日期”类型的日期

    我还在习惯使用 PHP 和 MYSQL 所以请耐心等待 我有一个名为 employee datetable 的数据库表 其中包含一个名为 datetime 的字段 其中包含明年实际日期的 365 条记录 2014 年 8 月 13 日到 2
  • 如何从 Google Chrome 启用本地文件系统读写访问?

    我需要使用 HTML Javascript 代码从 Google Chrome 启用本地文件系统读 写访问 我正在使用存储在本地系统中的一组 html 页面 即 file c project1 page html 我目前的观察是 我们可以使
  • C++纯虚函数有函数体[重复]

    这个问题在这里已经有答案了 纯虚函数 当我们设置 0 也可以有一个函数体 如果纯虚函数根本不会被调用 那么为它们提供函数体有什么用呢 您认为无法调用纯虚函数的假设是绝对错误的 当一个函数被声明为纯虚函数时 它仅仅意味着该函数无法被调用动态地