对于IO成员函数的重载不应该是一个成员函数的方式,并且应该声明为友元
一、如果为成员函数,都会有一个某人的参数,也就是this指针,为左操作数,下面考虑将其声明为成员函数的方式
对于cout<<t<<endl cout为左操作数,说明cout本身有一个重载的操作符方法,这显然是不可以的。
对于t<<cout;也是有问题的,因为更具<<的重载方式
ostream& operator<<(ostream& cout,const Test& t);
其中cout匹配左操作数,t匹配右操作数,在这里cout就会与t匹配,而t与cout匹配,矛盾
二、应该是一个全局的函数
因为本身全局函数没有this指针的问题,所以可以向正常的方式调用
cout<<t<<endl;
最终的实现为
test.h
#ifndef TEST
#define TEST
#include <iostream>
using namespace std;
class Test{
public:
Test(int,int);
ostream& operator<<(ostream&,const Test&);
private:
int a;
int b;
};
#endif
test.cpp
#include "test.h"
Test::Test(int a,int b){
this->a=a;
this->b=b;
}
ostream& operator<<(ostream& out,const Test& t){
cout<<t.a<<" "<<t.b<<endl;
}
int main(){
Test t(1,2);
cout<<t<<endl;
return 0;
}