我最近去在操作符重載的文章,其中提到它非成員運算符重載意思。如果有人能夠用一個例子解釋非成員操作符重載意味着什麼,我將不勝感激。我知道成員運算符重載是什麼(在重載(binary..etc)我看過這個post來到SO操作型這讓我相信,非成員運算符重載的目的是處理操作符重載類的方法其中,第一個參數是不是一個類,簡直就是一個天然的類型解釋非成員運算符重載是肯定會理解的任何鏈接或例子什麼是由非成員運算符重載
2
A
回答
4
這意味着你可以重載外的類。:
struct X { int data; };
bool operator<(X const& a, X const& b)
{
return a.data < b.data;
}
這是不對稱的重載,其中左邊的操作並不需要將自己的類型有用:
bool operator<(int a, X const& b)
{
return a < b.data;
}
這裏的一個常見的成語是將其與一流定義和朋友聯合聲明:
struct X
{
int data;
friend bool operator<(X const& a, X const& b) { return a.data<b.data; }
friend bool operator<(int a, X const& b) { return a<b.data; }
};
這裏,operator<
仍然是技術上非 -member。
這樣做的另一個有用的副作用,如下面DrewDormann指出,就是(X const&, X const&)
將適用於那些隱式轉換爲X const&
,而不僅僅是確切類型的表達式任何操作數。
+0
它對於* symetrical *類型轉換也很有用,允許所有相關操作數的隱式類型轉換。 – 2013-03-17 21:59:54
+0
@DrewDormann好點。添加 – sehe 2013-03-17 22:05:56
0
最常見的方式是重載操作< <將在std::cout
被稱爲:
namespace X {
class MyClass {
...
};
}
std::ostream& operator<< (std::ostream&, const X::MyClass&);
這就是所謂的std :: ostream的部件上,這樣你就不是你的類中定義它。然而有時候這個功能不能通過公共接口來實現(因爲你的操作員需要訪問數據表示)。
相關問題
- 1. 運算符重載:成員函數與非成員函數?
- 2. 成員二元運算符和運算符重載中的非成員二元運算符
- 3. 將運算符重載爲類成員
- 4. 運算符+ =重載,爲什麼是const?
- 5. 非成員運算符重載應該放在哪裏?
- 6. 不允許使用非成員函數重載C++轉換運算符的原因是什麼
- 7. 爲什麼運算符重載失敗?
- 8. 爲什麼我不能在類之外重載C++轉換運算符,作爲非成員函數?
- 9. 什麼是重寫的C運算符++
- 10. 重載運算符[]爲非類類型
- 11. 運算符重載 - 重載*
- 12. 迭代重載成員的選擇與間接運算符
- 13. 運算符重載(朋友和成員函數)
- 14. 作爲成員函數重載*乘法運算符兩次?
- 15. 「&」是什麼意思在運算符重載
- 16. 什麼是VB.NET中重載的'And'運算符的例子?
- 17. 什麼代碼是更好地使用運算符重載
- 18. 爲什麼C#運算符重載必須是靜態的?
- 19. 運算符在這裏重載是什麼:String8 :: operator const char *()const
- 20. 什麼是Java「= +」運算符?
- 21. 什麼是「===」運算符?
- 22. 什麼是()=>運算符?
- 23. C++ - 什麼是運算符。*?
- 24. 重載運算符*
- 25. 重載運算符%
- 26. 重載++運算符
- 27. 重載+ =運算符
- 28. 運算符重載?
- 29. 重載運算符[]
- 30. 重載運算符=
您給出的鏈接顯示非會員操作員重載的示例,如您所說的用於在原語上執行添加操作 – 2013-03-17 21:57:02
[This](http://stackoverflow.com/q/4421706/1410711)可能會有所幫助。 。 – Recker 2013-03-17 21:57:26