c++ 過載<<和>>的方式
阿新 • • 發佈:2021-07-06
背景
我們很多時候看到類似以下程式碼
int main(int argc, char **argv)
{
int value = 10;
cout << value << endl;
return 0;
}
輸出:
但如果我們自定義的類,是否也能這樣的輸出呢,看以下程式碼
很顯然,這已經報錯了
解決方法
這時候就要引進我們c++的過載機制了
#include <iostream> using namespace std; class MyClass { public: MyClass() {} ~MyClass() {} friend ostream& operator<<(ostream& out, MyClass& a); //新增這句 private: int _value = 10; }; //函式實現 ostream& operator<<(ostream& out, MyClass& a) { out << a._value; return out; } int main(int argc, char **argv) { MyClass a; cout << a << endl; return 0; }
輸出結果
可以看到已經輸出正確結果了
那既然有了輸出 << ,又想有輸入>>怎麼辦?很簡單,繼續過載>>即可
完整程式碼
#include <iostream> using namespace std; class MyClass { public: MyClass() {} ~MyClass() {} friend ostream& operator<<(ostream& out, MyClass& a); friend istream& operator>>(istream& in, MyClass& a); private: int _value = 10; }; ostream& operator<<(ostream& out, MyClass& a) { out << a._value; return out; } istream& operator>>(istream& in, MyClass& a) { in >> a._value; return in; } int main(int argc, char **argv) { MyClass a; cout << "輸入:"; cin >> a; cout << endl << "輸出:" << a << endl; return 0; }
輸出
結束
使用關鍵字operator,記得需要用友元函式方式去過載,不使用成員函式去過載!