C++重载>>和<<
在C++中,可以使用重载运算符来定义输入流运算符(>>)和输出流运算符(<<)的行为。
重载输入流运算符(>>)
重载输入流运算符(>>)可以用于从输入流中读取数据并赋值给对象的成员。它通常用于实现从标准输入(cin)读取数据。
下面是一个重载输入流运算符(>>)的示例:
class MyClass {
public:
int a;
double b;
friend istream& operator>>(istream& input, MyClass& obj) {
input >> obj.a >> obj.b;
return input;
}
};
int main() {
MyClass obj;
cin >> obj;
return 0;
}
在上面的示例中,重载的输入流运算符的函数签名为istream& operator>>(istream& input, MyClass& obj)
。它需要两个参数:输入流input
和一个要被赋值的MyClass
对象引用obj
。
在函数体内部,可以使用输入流对象input
的提取运算符(>>)从输入流中读取数据,并将其赋值给obj
的成员a
和b
。
重载输出流运算符(<<)
重载输出流运算符(<<)可以用于将对象的成员值输出到输出流。它通常用于将数据输出到标准输出(cout)。
下面是一个重载输出流运算符(<<)的示例:
class MyClass {
public:
int a;
double b;
friend ostream& operator<<(ostream& output, const MyClass& obj) {
output << obj.a << " " << obj.b;
return output;
}
};
int main() {
MyClass obj;
obj.a = 10;
obj.b = 3.14;
cout << obj;
return 0;
}
在上面的示例中,重载的输出流运算符的函数签名为ostream& operator<<(ostream& output, const MyClass& obj)
。它需要两个参数:输出流output
和一个要被输出的MyClass
对象的常量引用obj
。
在函数体内部,可以使用输出流对象output
的插入运算符(<<)将obj
的成员a
和b
插入到输出流中。
限制和注意事项:
- 重载输入流运算符(>>)通常返回输入流对象的引用(istream&),以实现多次连续的输入操作。
- 重载输出流运算符(<<)通常返回输出流对象的引用(ostream&),以实现多次连续的输出操作。
- 为了进行输入和输出流的操作,需要包含<iostream>
头文件。
- 重载输入流运算符(>>)和输出流运算符(<<)通常定义为类的友元函数(friend),以便访问私有成员。