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