[英]Overloading operators with non-member functions
這個問題的答案似乎使我無所適從,但是如何使用非成員函數進行重載。 您是否只是創建一個程序級別的函數,並且在原型(或定義)存在的地方,該類類型的操作符就會重載?
對於成員函數, this
將是左側參數,這意味着您的運算符將僅具有一個參數(對於一元運算符則沒有參數)。 使用獨立功能,您必須分別為二進制或一元運算符提供兩個或一個參數。
一個很好的例子是流的<<
操作符:
class T;
// ...
std::ostream & operator<<(std::ostream &os, const T &val)
{
// ...
return os;
}
在這里, os
是左側參數,而val
是右側參數。
至於“ where”,必須在您使用的地方定義運算符。 通常,將它們與要重載運算符的類型放在同一位置。
編輯:
對於非平凡的運算符(原始類型的算術運算),運算符是函數調用的語法糖。 執行此操作時:
std::cout << "Hello";
就像這樣寫:
operator<<(std::cout, "Hello");
但是更具可讀性。
對於成員運算符,left參數將是this
(這就是為什么成員運算符少一個參數的原因)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.