對於c++中流操作符過載的理解
對於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;
}