c++ 重載<<和>>的方式


背景

我們很多時候看到類似以下代碼

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,記得需要用友元函數方式去重載,不使用成員函數去重載!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM