流插入(提取)运算符的重载

可以这样重载流插入运算符“<<”,重载函数如下:
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;
}

评论

此博客中的热门博文

清明雨凉

简记