C++ 继承和函数重写

2024-01-07

在C++中,基类的成员函数是否会被其同名的派生类函数覆盖,即使它的原型(参数的数量、类型和常量)不同?我想这是一个愚蠢的问题,因为许多网站都说函数原型应该相同才能发生这种情况;但为什么下面的代码不能编译?我相信这是一个非常简单的继承案例。

#include <iostream>
using std::cout;
using std::endl;

class A {};
class B {};

class X
{
public:
    void spray(A&)
    {
        cout << "Class A" << endl;
    }
};

class Y : public X
{
public:
    void spray(B&)
    {
        cout << "Class B" << endl;
    }
};

int main()
{
    A a;
    B b;
    Y y;

    y.spray(a);
    y.spray(b);

    return 0;
}

GCC 抛出

error: no matching function for call to `Y::spray(A&)'
note: candidates are: void Y::spray(B&)

用于描述这一点的术语是“隐藏”,而不是“覆盖”。默认情况下,派生类的成员将使任何具有相同名称的基类成员不可访问,无论它们是否具有相同的签名。如果要访问基类成员,可以使用以下命令将它们拉入派生类:using宣言。在这种情况下,将以下内容添加到class Y:

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

C++ 继承和函数重写 的相关文章

  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet

随机推荐

  • 从 ActiveRecord/Rails 查询中检索单个记录

    我发出如下查询 精确检索 0 或 1 条记录 car Car where vin 1234567890abcdefg 返回的当然是长度为 1 的汽车列表 所以我最终添加 first在查询末尾 car Car where vin 123456
  • 在 UITabBarController 上的选项卡之间共享背景视图

    是否可以在 UITabBarController 上的选项卡之间具有相同的背景 而不必在所有视图上设置相同的背景 我想在后台放置一个视图 定期执行非常短的非资源密集型动画 切换选项卡时 我希望该动画能够持续存在 我已经阅读了如何为 UINa
  • JavaScript 中的节点是什么?

    我想知道 JavaScript 中的节点到底是什么 如函数中所示 element nodeType row parentNode removeChild row 在这种情况下 节点 只是一个 HTML 元素 DOM 是代表网站 HTML 的
  • Fiware Ultralight 2.0 IoTAgent:如何从设备发送测量?

    我正在研究一个 POC 使用 Fiware 平台创建智能城市物联网项目 我正在尝试运行端到端流程 我正在运行以下 Docker 容器 容器 ID 端口名称 24f036202f78 0 0 0 0 4041 gt 4041 tcp 0 0
  • 如何为自定义 Java 标记添加 Eclipse 快速修复?

    我想向 Eclipse 的问题视图报告 Java 文件的自定义问题并为它们提供快速修复 标准方法是使用扩展点org eclipse core resources markers声明自定义标记并通过调用添加标记org eclipse core
  • 在 VS 设计器中加载包时禁用 SSIS 包验证

    我有一些部署到 SQL 2005 Server 的 SSIS 包 随后在 Visual Studio 2003 中设计和维护 当我打开任何 BIDS 项目以及其中一个包时 设计器总是验证每个数据流和任务目的 通常 这不是问题 但是 在某些情
  • Jasmine单元测试observable订阅不触发

    我将 Angular 5 与 Jasmine 和 Karma 一起使用 我正在尝试测试某个功能是否有效 但我的订阅在单元测试期间没有触发 这导致我的单元测试失败 因为我正在使用 jasmine 的 did 函数 我想让这个单元测试成功 我已
  • Tomcat 中的 NIO 连接器

    我试图通过配置 server xml 文件在 Tomcat 6 0 中启用 NIO 连接器 但我得到Firefox 无法与位于 localhost 8081 的服务器建立连接 每当我输入时在浏览器中本地主机 8081 这就是我在 Tomca
  • DataGridTextColumn - 如何绑定IsReadonly?

    在 Silverlight 4 中 DataGridTextColumn 的 IsReadOnly 属性似乎不是依赖属性 因此我无法将它绑定到视图模型上的属性 似乎唯一的选择是使用 DataTemplate 但即使在这里我也面临两个主要问题
  • 用循环填充矩阵

    我正在尝试创建一个矩阵n by k with kmvn 使用循环进行协变量 非常简单 但到目前为止还没有工作 这是我的代码 n 1000 k 5 p 100 mu 0 sigma 1 x matrix data NA nrow n ncol
  • 如何在 laravel eloquent 中添加两列值并执行 where 条件

    这是我的桌子 id remaining amount additional amount 1 200 0 2 100 100 3 300 100 4 200 50 我正在尝试获取总和为剩余数量 额外金额 gt 0 result this g
  • 响应 SwiftUI 中的按键事件

    我想响应按键 例如esc键在 macOS OSX 上 以及在 iPad 上使用外部键盘时 我怎样才能做到这一点 我想过用 available available与 SwiftUI 的onExitCommand https developer
  • 一行中没有所有 True 值的布尔数组

    I have numpy array np random seed 100 mask np random choice True False size 10 3 print mask True True False False False
  • 如何在 git url 的用户名或密码中转义“@”

    在命令行上推送到 git 的格式之一是 Url format https username password github com owner repo 我的挑战是用户名和密码 这是我无法控制的共享帐户 包含 在他们里面 实际上都是 在这种
  • Spring-Boot Jersey:允许 Jersey 提供静态内容

    该应用程序使用 JDK 8 Spring Boot 和 Spring Boot Jersey 启动器 并打包为 WAR 尽管它是通过 Spring Boot Maven 插件在本地运行 我想做的是将我动态 在构建时 生成的文档作为欢迎页面
  • 部分排列

    我有以下递归函数用于输出部分组合 void comb string sofar string rest int n string substring if n 0 cout lt lt sofar lt lt endl else for s
  • 使用 AutoSize 时的 FlowLayoutPanel 高度错误

    我有一个包含 1 列和 3 行的 TableLayout 的表单 其中包含 2 个 FlowLayoutPanel 和一个文本框 所有行均为 AutoSize 列设置为 Percentage 100 每个 FlowLayoutPanel 都
  • .NET Core 2.1 - 构建时的 dotnet/exe,缺少软件包

    我一直在一台机器上进行开发 最近尝试在另一台电脑上安装我的应用程序 我想我已经推断出自从在 NET Core 中以来就没有找到 nuget 包 nuget 将包放在本地 Users 文件夹路径中 我最初添加了
  • 从自定义表单将数据插入 WordPress 数据库表

    我正在尝试通过创建表将数据插入 Wordpress 数据库 我已经创建了表 但是当我尝试从表单插入数据时 它不会插入数据 我已经检查数据库连接是否有效 但插入没有发生 有人可以帮我解决这个问题吗 这是我的代码
  • C++ 继承和函数重写

    在C 中 基类的成员函数是否会被其同名的派生类函数覆盖 即使它的原型 参数的数量 类型和常量 不同 我想这是一个愚蠢的问题 因为许多网站都说函数原型应该相同才能发生这种情况 但为什么下面的代码不能编译 我相信这是一个非常简单的继承案例 in