背景
我們很多時候看到類似以下代碼
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,記得需要用友元函數方式去重載,不使用成員函數去重載!