运算符 << 和继承

2024-02-17

我有以下 C++ 类:

class Event {
        //...
        friend ofstream& operator<<(ofstream& ofs, Event& e);

};


class SSHDFailureEvent: public Event {
    //...
    friend ofstream& operator<<(ofstream& ofs, SSHDFailureEvent& e);
};

我要执行的代码是:

main() {

 Event *e = new SSHDFailureEvent();
 ofstream ofs("file");
 ofs << *e; 

}

这是一种简化,但我想做的是将几种类型的事件写入文件中 在一个文件中。但是,它不使用 SSHDFailureEvent 的运算符

Thanks


那是行不通的,因为那会调用operator<<为基类。

您可以定义一个虚函数print在基类中并重新定义它所有的派生类,并定义operator<<仅一次,

class Event {

      virtual ofstream& print(ofstream & ofs) = 0 ; //pure virtual  

      friend ofstream& operator<<(ofstream& ofs, Event& e);
};

//define only once - no definition for derived classes!
ofstream& operator<<(ofstream& ofs, Event& e)
{
   return e.print(ofs); //call the virtual function whose job is printing!
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运算符 << 和继承 的相关文章

  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 在实体框架拦截器中向 DbScanExpression 添加内部联接

    我正在尝试使用实体框架 CommandTree 拦截器通过 DbContext 向每个查询添加过滤器 为了简单起见 我有两个表 一个称为 User 有两列 UserId 和 EmailAddress 另一个称为 TenantUser 有两列
  • 在 C# 中按元素相乘数组具有意想不到的性能

    我想找到按元素相乘两个数组的最佳方法 这是更广泛项目的一部分 其中性能而不是唯一的考虑因素 我今天开始用 C Linqpad 编写一些函数 因此它还没有以任何方式进行优化 下面代码的输出如下 Environment ProcessorCou
  • 检查一个类是否是另一个类的子类

    我想在不创建实例的情况下检查一个类是否是另一个类的子类 我有一个类 它接收类名作为参数 作为验证过程的一部分 我想检查它是否属于特定的类系列 以防止安全问题等 有什么好的方法可以做到这一点吗 is subclass of http php
  • 我如何在 C# .NET(win7 手机)中使用“DataContractJsonSerializer”读入“嵌套”Json 文件?

    我有一个问题 如果我的 json 文件看起来像这样 Numbers 45387 Words 空间桶 我可以很好地阅读它 但是如果它看起来像这样 Main Numbers 45387 Words 空间桶 某事 数字 12345 单词 克兰斯基
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 运行选定的代码生成器时出错:“未将对象引用设置到对象的实例。”错误?

    我已经尝试了所有解决方案 例如修复 VS 2013 但没有用 当您通过右键单击控制器文件夹来创建控制器并添加控制器时 然后右键单击新创建的控制器的操作并选择添加视图 当我尝试创建视图时 就会发生这种情况 它不是一个新项目 而是一个现有项目
  • 如何通过 JsonConvert.DeserializeObject 在动态 JSON 中使用 null 条件运算符

    我正在使用 Newtonsoft 反序列化已知的 JSON 对象并从中检索一些值 如果存在 关键在于对象结构可能会不断变化 因此我使用动态来遍历结构并检索值 由于对象结构不断变化 我使用 null 条件运算符来遍历 JSON 代码看起来像这
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 将不存在的元素添加到 DynamoDB 中的数组

    我正在尝试更新项目属性 即字符串列表 仅当属性不存在时我才可以更新 追加 该属性吗 类似于 list append 和 if not exists var 参数 UpdateExpression 设置朋友 list append if no
  • 增加 ggplot 标题中下划线的大小

    我正在尝试增加 ggplot 标题中下划线的大小 宽度 厚度 我尝试过使用尺寸 宽度和长度 但没有成功 这是我所做的一个例子 test lt tibble x 1 5 y 1 z x 2 y ggplot test aes x z geom
  • Spring 3.1.1 与 hibernate 4.1 注解配置

    我正在使用 spring3 1 1 和 hibernate 4 1 设置新项目 当我运行我的项目时 出现以下错误 java lang NoSuchMethodError org hibernate SessionFactory getCur
  • 获取Redis集群中所有key

    我使用的是Redis集群版本redis 5 0 5 我想查看 Redis 集群中存在的所有密钥 我知道我们使用独立的KEYS 获得所有钥匙 如何查看Redis集群中的所有键 redis cli h hostname p 90001 c ho
  • 如何托管我自己的私有 conda 存储库?

    我有几个相互依赖的 python 项目 我为每个项目都有不同的发行版本 不同的项目可能依赖于特定项目的不同发行版本 我想在内部服务器上创建自己的 conda 存储库 在其中我可以将这些项目的版本作为 conda 包推送 其他项目可以从那里安
  • window.location.href 与单击锚点

    点击有什么区别 a href href a vs calling window location href 只要有可能 您应该使用 a href foo html over window location href 有很多很好的理由 如果您
  • 有没有办法检查缓冲区是否采用 Brotli 压缩格式?

    我是一名实习生 正在研究在软件中使用 Brotli 压缩是否可以比当前版本 使用 GZip 带来性能提升 我的任务是使用 GZip 更改任何内容以使用 Brotli 压缩 我需要替换的一个函数会检查缓冲区是否包含使用 GZip 压缩的数据
  • 在 Python 中处理非常大的数字

    我一直在考虑用 Python 进行快速扑克牌评估 我突然想到 加快该过程的一种方法是将所有牌面和花色表示为素数 并将它们相乘以表示手牌 至惠特 class PokerCard faces 23456789TJQKA suits cdhs f
  • NodeJs如何在控制台中显示结构化表格

    不安装新包可以吗 Here i am using cli table package 有什么简单的方法可以做到吗 您可以使用控制台 表 https developer mozilla org en US docs Web API Conso
  • 如何在 create-react-app 中更新 Jest 测试框架?

    我已经创建了一个应用程序create react app https github com facebookincubator create react app包裹 我发现 Jest 版本 15 1 1 存在错误 但我意识到在版本 16 中
  • 函数模板的显式实例化失败 (g++)

    我在函数模板的显式实例化方面遇到一些问题 即链接错误 在Visual Studio下项目链接正常 仅在g Unix下 使用Eclipse CDT 链接产生错误 在一个大项目中 函数调用是静态库的一部分 它与动态库链接 函数架构如下 函数模板
  • 如何从 FilterAttribute 中获取当前 Url?

    我正在编写一个授权过滤器属性 但我无法弄清楚如何以字符串形式获取当前 url 以便我可以将其作为参数传递给 LogOn 操作 目标是 如果用户成功登录 他们将被重定向到他们最初尝试访问的页面 public override void OnA
  • 将 Python None 转换为 JavaScript null

    在 Django 视图中 我生成一个如下所示的数据集 data 22 23 18 19 21 None 22 20 我使用以下方法将此数据传递给 JavaScript 变量 data json simplejson dumps data 用
  • 从 S3 下载文件时 AWS Lambda 中出现“只读文件系统”错误

    当我将 file csv 放入 S3 存储桶时 我在 lambda 函数中看到以下错误 该文件并不大 我什至在打开文件进行读取之前添加了 60 秒的睡眠时间 但由于某种原因 该文件附加了额外的 6CEdFe7C 这是为什么 Errno 30
  • 使用电子邮件和密码验证用户身份

    我有一个只允许用户通过 username 登录的表单 我决定只允许用户通过电子邮件而不是用户名登录 首先 这不是与通过电子邮件登录相关的任何问题的重复 因为在我的场景中 我验证并验证了用户forms py在他继续在视图中进行最终登录之前 这
  • 协议缓冲区 Java RPC 堆栈

    根据this http en wikipedia org wiki Protocol Buffers维基百科条目 Protocol Buffers 与 Facebook 的 Thrift 协议非常相似 只是它不包含用于定义服务的具体 RPC
  • Flutter:如何允许内容重叠 SliverAppBar?

    在android中我们使用的是app behavior overlapTop 64dp 为了达成这个 我想要重叠内容与上面的 flutter 中的 GIF 相同 My code class DetailsPage extends State
  • 通过分割视图控制器使用多个详细视图

    如您所知 一个UISplitViewController只有一个根控制器和一个详细视图控制器 但我想使用另一个详细视图控制器 当我从根控制器 弹出窗口控制器 中选择列表项时 选择应该触发不同的详细视图 即 row1 触发详细视图 1 row
  • 在 Blazor WebAssembly 客户端应用程序中使用 Serilog 作为日志记录提供程序

    我想在客户端和服务器端的 blazor web assembly net 6 应用程序中使用 serilog 在本文 https nblumhardt com 2019 11 serilog blazor 我发现了如何将日志条目中继到服务器
  • 运算符 << 和继承

    我有以下 C 类 class Event friend ofstream operator lt lt ofstream ofs Event e class SSHDFailureEvent public Event friend ofst