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`,并将它输出到控制台;然后使用提取运算符从控制台读取数据给当前对象赋值;最后再次使用插入运算符将当前对象输出到控制台。

目录
相关文章
|
3月前
|
存储 算法 C语言
C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项
本文深入探讨了C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项,并通过案例分析展示了实际应用,旨在帮助读者提高编程效率和代码质量。
169 4
|
9月前
|
算法 C++ 开发者
【C++运算符重载】深入理解C++中的流运算符 >>和<<重载
【C++运算符重载】深入理解C++中的流运算符 >>和<<重载
112 0
|
8月前
|
C# 数据库
C#中的空合并运算符与空合并赋值运算符:简化空值处理
C#中的空合并运算符与空合并赋值运算符:简化空值处理
|
运维 Shell Python
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(一)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)
153 0
|
Java
高效实现区间条件过滤:Java字符串转换为条件语句
高效实现区间条件过滤:Java字符串转换为条件语句
102 0
C++ 流插入和流提取运算符的重载
C++ 流插入和流提取运算符的重载
C++ 流插入和流提取运算符的重载
|
前端开发
形成新数组的方式扩展运算符
形成新数组的方式扩展运算符
48 0
|
运维 Shell Perl
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
151 0
|
编译器 C语言 C++
学C的第十六天【操作符详解:9. 条件操作符;10. 逗号表达式;11. 下标引用,函数调用和结构函数;12.表达式求值:整型提升、算术转换、操作符的属性;练习:使用函数完成整型函数的打印、元素逆置】-2
12.表达式求值 1. 表达式求值的顺序一部分是由操作符的优先级和结合性决定。 2. 有些表达式的操作数在求值的过程中可能需要转换为其它类型。
119 0