流插入(提取)运算符的重载
可以这样重载流插入运算符“<<”,重载函数如下:
举一个例子:
声明一个Time类,公用部分声明流插入运算符重载函数为友元函数,使其可以使用Time类对象的私有数据:
定义流提取运算符重载函数时,基本与插入运算符相同,如下:
ostream& operator << (ostream &output, classType &object) { //...echo code here return output; }通过类型相对应的实参,调用该函数,可以实现对类中数据成员的输出。注意函数的返回值,这里返回一个ostream型的引用。如果单独调用一次该重载函数,有无返回值无关紧要,但多次调用就不得不设置返回值了。
举一个例子:
声明一个Time类,公用部分声明流插入运算符重载函数为友元函数,使其可以使用Time类对象的私有数据:
class Time { public: Time() { hour=0; minute=0; second=0; } Time(int h,int m,int s):hour(h),minute(m),second(s){} friend ostream& operator << (ostream &, const Time &); private: int hour; int minute; int second; };定义流插入运算符重载函数:
ostream& operator << (ostream &output, const Time &t) { output << t.hour << ":" << t.minute << ":" << t.second << endl; return output; }在main函数中定义两个Time类对象,并使用重载函数输出:
Time t1(21,15,36); Time t2(16,20,11); cout << t1 << t2;在执行cout << t1 << t2;语句时,先运算前面的cout << t1,执行完毕后返回一个ostream类型的引用,该引用与后面的 << t2重新构成一个运算表达式,再次调用重载函数,并完成输出。这就是为什么流插入运算符重载函数要返回一个ostream型的引用了。
定义流提取运算符重载函数时,基本与插入运算符相同,如下:
istream& operator << (istream &input, classType &object) { //...read-in code here return input; }
评论