c++におけるストリームオペレータの再ロードの理解
681 ワード
IOメンバー関数のリロードはメンバー関数の方法ではなく、友元として宣言する必要があります.
一、メンバー関数の場合、誰かのパラメータ、すなわちthisポインタが左のオペランドであり、メンバー関数として宣言する方法を考える
cout<の場合
t<の場合
ここでcoutは左操作数、tは右操作数に一致し、ここでcoutはtと一致し、tはcoutと一致し、矛盾する.
二、グローバルな関数であるべきである
自分のグローバル関数にthisポインタの問題はないので、通常の方法で呼び出すことができます.
cout<
最終的な実装は
test.h
test.cpp
一、メンバー関数の場合、誰かのパラメータ、すなわちthisポインタが左のオペランドであり、メンバー関数として宣言する方法を考える
cout<の場合
t<の場合
ostream& operator<
ここでcoutは左操作数、tは右操作数に一致し、ここでcoutはtと一致し、tはcoutと一致し、矛盾する.
二、グローバルな関数であるべきである
自分のグローバル関数にthisポインタの問題はないので、通常の方法で呼び出すことができます.
cout<
最終的な実装は
test.h
#ifndef TEST
#define TEST
#include
using namespace std;
class Test{
public:
Test(int,int);
ostream& operator<
test.cpp
#include "test.h"
Test::Test(int a,int b){
this->a=a;
this->b=b;
}
ostream& operator<