#include <QCoreApplication>
#include <iostream>
//移位运算符重载测试
class MyOutNum
{
public:
MyOutNum &operator<<(int num)
{
printf("%d ",num);
return *this;
}
};
MyOutNum &Func_myout(MyOutNum &out, int a)
{
printf("%d ",a);
return out;
}
int main()
{
MyOutNum my_out;
int a=4567;
my_out << 123 << a;
printf("\n");
MyOutNum temp;
Func_myout( Func_myout( temp ,123), a);
return 0;
}
上一篇说到运算符重载本质上相当于执行一个函数,有输入有输出,这个例子展示了双目运算符<<重载执行的过程。
my_out << 123 << a;这句程序执行的过程可以分为以下等价的两步:
第一步:
MyOutNum temp;
temp = Func_myout(temp ,123);//也即 temp =my_out << 123;//保留返回值
第二步:
Func_myout(temp ,a);//也即,temp << a;//利用上次的返回值,抛弃本次返回值
如果把这两步合并成一步,也行:Func_myout( Func_myout( temp ,123), a);