流插入(提取)运算符的重载
可以这样重载流插入运算符“<<”,重载函数如下:
举一个例子:
声明一个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;
}
评论