C++ 使用流范例来实现标准输入/输出。
流范式意味着如果您的应用程序想要访问/使用资源(文件、控制台等),则流充当您的应用程序和资源之间的中介:
ofstream +----+
+-------------------->|File|
| +----+
|
+------+------+
| Application |
+------+------+
|
| +-------+
+-------------------->|Console|
cout +-------+
这意味着您执行的每个写入/读取操作实际上都是流操作。重点是流操作基本相同,与您使用的资源类型(以及流的类型)无关。
这使我们能够实现“通用”(通用含义对任何类型的流/资源都有效)。如何?重载 C++ 运算符 >> 和 <<。
对于输入操作(输入意味着从流中接收数据并将其放入我们的变量/对象中),我们需要重载 >> 操作符,如下所示:
istream& operator>>(istream& is , MyClass& object)
{
is >> object.myClassAtributte; (1)
... //Same for every attribute of your class.
return is;
}
首先,注意输入流是通过引用传递的。通过引用,因为流是不可复制的(复制流到底是什么意思?复制你的应用程序和资源之间的链接?这听起来很荒谬),并且非常量因为你要修改流(你要写通过这)。
最后,请注意该函数不返回 void,而是返回对传递给函数的同一流的引用。这使您可以编写连接的写/读句子,例如cout << "Hello. " << "Im" << " Manu343726" << endl;
对于输出操作(输出意味着将数据发送到流),我们需要重载 << 操作符,其实现完全相同:
ostream& operator<<(ostream& os , const MyClass& object)
{
os << object.myClassAtributte; (1)
... //Same for every attribute of your class.
return os;
}
请注意,在这种情况下,您的对象被传递给 const,因为我们不会修改它(我们只会读取它的属性)。
(1)最好实现此功能,使它们成为您班级的朋友,以允许我们访问私有/受保护的成员。