46重载流插入运算符和流提取运算符

简介: 46重载流插入运算符和流提取运算符

C++入门——60s从0到1

重载流插入运算符和流提取运算符

 

C++重载流插入运算符和流提取运算符是一种常见的操作,通过重载这些运算符,可以让用户更加方便地将自定义数据类型输出到控制台或文件中。

 

重载流插入运算符的语法

 

在C++中,流插入运算符是指将一个对象输出到一个输出流中的运算符,例如 `<<`。重载流插入运算符的语法如下:

class MyClass {
public:
    // 普通成员函数
    friend ostream& operator<<(ostream& os, const MyClass& obj) {
        os << "MyClass: " << obj.m_a << endl;
        return os;
    }
};

 

在上面的代码中,我们定义了一个 `MyClass` 类,并重载了流插入运算符 `<<`。该运算符需要两个参数,第一个参数是一个 `ostream` 类型的引用,表示输出流;第二个参数是我们需要输出的对象。在函数体中,我们将对象的值 `m_a` 输出到控制台,并将结果返回给输出流。

 

重载流提取运算符的语法

 

在C++中,流提取运算符是指从一个输入流中读取一个对象并将其赋值给另一个对象的运算符,例如 `>>`。重载流提取运算符的语法如下:

 

class MyClass {
public:
    // 构造函数
    MyClass(int a = 0) : m_a(a) {}
    // 从输入流中读取数据
    void read(istream& is) {
        is >> m_a;
    }
    // 重载输入运算符
    friend istream& operator>>(istream& is, MyClass& obj) {
        obj.read(is);
        return is;
    }
private:
    int m_a;   // 值
};

 

在上面的代码中,我们定义了一个 `MyClass` 类,表示一个简单的数值类型。该类包含一个私有成员变量 `m_a`,表示对象的值。我们还定义了一个 `read()` 函数,用于从输入流中读取数据。最后我们重载了流提取运算符 `>>`,用于从输入流中读取数据并将其赋值给当前对象。

 

示例代码

 

下面是一个简单的示例代码,演示如何重载流插入运算符和流提取运算符:

 

#include <iostream>
using namespace std;
 
class MyClass {
public:
    // 构造函数
    MyClass(int a = 0) : m_a(a) {}
    // 从输入流中读取数据
    void read(istream& is) {
        is >> m_a;
    }
    // 将对象输出到输出流中
    friend ostream& operator<<(ostream& os, const MyClass& obj) {
        os << "MyClass: " << obj.m_a << endl;
        return os;
    }
private:
    int m_a;   // 值
};
 
int main() {
    MyClass a(10);   // 创建一个对象并初始化
    cout << a;       // 使用重载的插入运算符输出对象到控制台
    a >> cout;       // 使用重载的提取运算符从控制台读取数据给对象赋值
    cout << a;       // 使用重载的插入运算符再次输出对象到控制台
    return 0;
}
```

 

在上面的代码中,我们定义了一个 `MyClass` 类,表示一个简单的数值类型。该类包含一个私有成员变量 `m_a`,表示对象的值。我们还定义了一个 `read()` 函数,用于从输入流中读取数据。最后我们重载了流插入运算符 `<<` 和流提取运算符 `>>`,用于将对象输出到控制台或从控制台读取数据给对象赋值。在 `main()` 函数中,我们先创建了一个 `MyClass` 对象 `a`,并将它输出到控制台;然后使用提取运算符从控制台读取数据给当前对象赋值;最后再次使用插入运算符将当前对象输出到控制台。

目录
相关文章
|
网络协议 Java Nacos
Nacos报错问题之jar 包启动就报错误如何解决
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
1062 2
|
3月前
Feign 调用超时,会自动重试吗?如何设置?
Feign默认不重试超时请求,但可通过Retryer配置重试策略。可设置最大重试次数、间隔等参数,并结合@FeignClient的configuration属性启用,提升服务调用的容错能力。
245 0
|
关系型数据库 MySQL PHP
PHP与MySQL动态网站开发实战指南####
本文深入探讨了PHP与MySQL在动态网站开发中的应用实践,通过具体案例解析如何高效结合这两大技术构建数据驱动的Web应用。文章将涵盖环境搭建、基础语法回顾、数据库设计与操作、用户注册与登录系统实现等关键步骤,旨在为开发者提供一个从零到一的项目实战路径,展示PHP与MySQL协同工作的强大能力。 ####
|
人工智能 算法 搜索推荐
单纯接入第三方模型就无需算法备案了么?
随着人工智能的发展,企业接入第三方模型提升业务能力的现象日益普遍,但算法备案问题引发诸多讨论。根据相关法规,无论使用自研或第三方模型,只要涉及向中国境内公众提供算法推荐服务,企业均需履行备案义务。这不仅因为服务性质未变,风险依然存在,也符合监管要求。备案内容涵盖模型基本信息、算法优化目标等,且需动态管理。未备案可能面临法律和运营风险。建议企业提前规划、合规管理和积极沟通,确保合法合规运营。
|
Rust API 开发者
【一起学Rust | 框架篇 | ws-rs框架】属于Rust的Websocket框架——ws-rs
【一起学Rust | 框架篇 | ws-rs框架】属于Rust的Websocket框架——ws-rs
1797 0
|
运维 负载均衡 算法
“分布式基础概念”全面解析,让你秒懂分布式系统!【一】
该博客文章全面解析了分布式系统的基础概念,包括微服务架构、集群与分布式的区别、节点定义、远程调用、负载均衡、服务注册与发现、配置中心、服务熔断与降级以及API网关,帮助读者快速理解分布式系统的关键组成部分和工作原理。
“分布式基础概念”全面解析,让你秒懂分布式系统!【一】
|
SQL 存储 Apache
Paimon 实践 | 基于 Flink SQL 和 Paimon 构建流式湖仓新方案
Paimon 实践 | 基于 Flink SQL 和 Paimon 构建流式湖仓新方案
5492 59
|
机器学习/深度学习 存储 测试技术
langchain 入门指南 - 如何做好 Prompt
langchain 入门指南 - 如何做好 Prompt
400 0
|
机器学习/深度学习 搜索推荐 算法
个性化音色定制:FunAudioLLM 的用户偏好学习机制
【8月更文第28天】随着语音合成技术的发展,越来越多的应用程序允许用户定制自己喜爱的声音类型。FunAudioLLM 是一个虚构的语音合成框架,它利用机器学习算法来适应用户的个人偏好,从而生成更加个性化的音色。本文将介绍 FunAudioLLM 如何通过用户偏好学习机制来调整和优化声音输出,并提供一些示例代码。
564 0
|
存储 移动开发 JavaScript
使用vue互联QQ音乐完成网站音乐播放器
记录使用APlayer播放器+MetingJs实现 在线播放qq音乐、网易云音...等平台的音乐
903 1
使用vue互联QQ音乐完成网站音乐播放器