- ベストアンサー
二項演算子のオーバーライドについて
目黒@C++学習中 です。 二項演算子のオーバーライドする時 どうして"friend"にしないといけないの? 以下テスト ソース #include <windows.h> #pragma warning(push,3) #include <iostream> #include <iomanip> #pragma warning(pop) using namespace std; class clsTest { private: double m_dNum; public: clsTest() : m_dNum(0) {} clsTest(double dNum) : m_dNum(dNum) {} ~clsTest(){}; friend clsTest operator + (const clsTest oP1,const clsTest oP2) { return clsTest(oP1.m_dNum+oP2.m_dNum); } friend ostream& operator << ( ostream& oOutStream,const clsTest oT ) { return oOutStream << "T(" << oT.m_dNum <<")"; } }; void main() { clsTest oT1(2); clsTest oT2(5); clsTest oT3 = oT1 + oT2; cout << setiosflags(ios::fixed) << setprecision(4); cout << oT1 << endl; cout << oT2 << endl; cout << oT3 << endl; }
- みんなの回答 (3)
- 専門家の回答
補足
では逆に Add関数をグローバルにする方法は? class clsTest { private: double m_dNum; public: clsTest() : m_dNum(0) {} clsTest(double dNum) : m_dNum(dNum) {} void Add(clsTest oT1,clsTest oT2) { m_dNum = oT1.m_dNum + oT2.m_dNum; } // friend clsTest Add(clsTest oT1,clsTest oT2){} }; void main() { clsTest oT1(2); clsTest oT2(5); clsTest oT3; oT3.Add(oT1,oT2); // oT3 = Add(oT1,oT2) こう書きたい } #クラスの基本的な理解が欠けているみたいで、すみません #このへんのことが書いてある おすすめの本があれば教えて下さい