在 C++中,ostream表示输出流,英文"output stream"的简称;istream表示输入流,英文“input stream”的简称。在 C++中常见的输出流对象就是标准输出流cout,标准输入流是cin。很少自定义ostream和iostream的对象,更多的是直接使用cout和cin。
在C++入门3——类与对象2(类的6个默认成员函数)我们以Date类讲运算符重载函数时提到:自定义的Date不能直接相加减,因为操作符+、-、*、/等的操作对象都是整型、浮点型、实型等普通类型,需要将其重载才能实现Date类的直接相加减。
其实,与cout和cin经常相伴而出的>>和<<也是运算符,与+、-、*、/属于同一类别,他们二者是双目运算符。与之相同,自定义的Date类也不能直接输入和输出,在C++入门——日期类的实现中,实现输出我们还需要定义一个Print成员函数,通过调用实现输出。
现在,我也想与=、-、*、/一样,直接实现Date类的输入输出,要怎么做呢?——答案当然也是运算符重载。
请看代码:
//<<运算符重载 ostream& operator<<(ostream& _cout, const Date& d) { _cout << d._year << "-" << d._month << "-" << d._day; return _cout; } //>>运算符重载 istream& operator>>(istream& _cin, Date& d) { _cin >> d._year; _cin >> d._month; _cin >> d._day; return _cin; }
然后将其作为Date类的友元函数出现,作为<<和>>操作重载:
class Date { //友元函数声明 friend ostream& operator<<(ostream& _cout, const Date& d); friend istream& operator>>(istream& _cin, Date& d); public : Date(int year = 2, int month = 2 , int day = 2) { _year = year; _month = month; _day = day; } private: int _year; int _month; int _day; };
这样就实现了Date类的直接输入与输出:
int main() { Date d; cin >> d; cout << d << endl; return 0; }