之前了解过运算符重载中的四则运算,本次介绍如何重载输入和输出流
之前了解到,运算符的重载在本质上就是函数的调用,因此,在重载之前我们需要先判断此重载的符号的返回值应该是什么
在C++编程中,每次都需要包含头文件iostream,实际上,iostream包括istream和ostream两大部分。其中,istream指的是输入,ostream指的是输出。因此,可以合理猜测,输出流返回的就是ostream类,而输入流返回的就是istream类。
此时,再来通过例子进行观察:
#include <iostream>
using namespace std;
class Rectangle {
public:
int length;
int width;
int height;
void setRect(int l, int w, int h) {
length = l;
width = w;
height = h;
}
void show() {
cout << length << " "
<< width << " "
<< height << endl;
}
};
ostream& operator<<(ostream& output, const Rectangle& rect) {
output << "length: " << rect.length << endl;
output << "width: " << rect.width << endl;
output << "height: " << rect.height << endl;
return output;
}
istream& operator>>(istream& input, Rectangle& rect) {
input >> rect.length >> rect.width >> rect.height;
return input;
}
int main() {
//输出部分
Rectangle num;
num.setRect(12, 13, 14);
cout << num << endl;
operator<<(cout, num) << endl;
//输入部分
Rectangle num1;
cin >> num1;
cout << num1 << endl;
operator>>(cin, num1);
cout << num1 << endl;
return 0;
}
在上面的例子中,重载“<<”运算符来直接对类Rectangle进行输出,在重载的时候,因为后方的rect不需要修改值,因此使用const进行限定,防止误改rect的数据,通过“<<”运算符将所有的数据流入output中,再返回给函数本身,然后再进行输出。使用引用可以让数据的传递速度更快,节省内存空间。
在使用的时候也有两种方法,可以是通过运算符直接使用,也可以通过函数调用实现。
同理,对于输入,就需要通过istream类进行返回。但是,此时的Rectangle必须是引用,而且不能用const进行修饰。因为此时需要通过外部传参的方式直接修改rect的值,且因为是修改,所以不能将其设置为常量。同理,需要修改input的值,因此input也必须是引用。
读者可以在学习完此部分的运算符重载后通过重载实现复数类的四则运算的计算器。