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

目录
相关文章
|
4天前
|
对象存储 C++
在C++语言中字符串流
在C++语言中字符串流
18 2
|
4天前
|
算法 C++ 开发者
【C++运算符重载】深入理解C++中的流运算符 >>和<<重载
【C++运算符重载】深入理解C++中的流运算符 >>和<<重载
40 0
|
4天前
|
C++
【C++】istream类型对象转换为逻辑条件判断值
【C++】istream类型对象转换为逻辑条件判断值
【C++】istream类型对象转换为逻辑条件判断值
|
4天前
|
存储 C++
62字符串流
62字符串流
15 0
|
8月前
|
C++
C++重载输入和输出运算符
在C++中,标准库本身已经对左移运算符<<和右移运算符>>分别进行了重载,使其能够用于不同数据的输入输出,但是输入输出的对象只能是 C++ 内置的数据类型(例如 bool、int、double 等)和标准库所包含的类类型(例如 string、complex、ofstream、ifstream 等)。 如果我们自己定义了一种新的数据类型,需要用输入输出运算符去处理,那么就必须对它们进行重载。本节以前面的 complex 类为例来演示输入输出运算符的重载。 其实 C++ 标准库已经提供了 complex 类,能够很好地支持复数运算,但是这里我们又自己定义了一个 complex 类,这样做仅仅是
61 0
|
9月前
|
前端开发
形成新数组的方式扩展运算符
形成新数组的方式扩展运算符
30 0
|
C语言 C++
插入运算符“>>“和提取运算符“<<“的重载
🐰插入运算符">>"和提取运算符"<<"的重载 🌸(1)要对"<<"和">>"运算符进行重载,必须重载为类的友元函数 🌸(2)重载的友元函数的返回类型应该是ostream对象或者istream对象的引用,即ostream&或istream& 🌸利用"<<",">>"以及"+","-"的重载实现,时差的计算
C++ 流插入和流提取运算符的重载
C++ 流插入和流提取运算符的重载
C++ 流插入和流提取运算符的重载
Kam
Stream流代替双重for循环小记
Stream流代替双重for循环
Kam
871 0
|
编译器 C++
【C++】流插入、提取运算符和类型转换
【C++】流插入、提取运算符和类型转换
105 0