假設我們有以下類:
class Rational { // Represents rational number. n=1/2=d for example.
public:
int n = 0;
int d = 1;
};
Rational x = Rational();
x.n = 1;
x.d = 2;
是否可以進行多載3 * x而3/2不是錯誤?
我的老師說多載只發生在相同型別的物件之間,但是為什么我們可以在型別和型別物件之間進行多載,cout而ostream不是Rational型別int和Rational?
uj5u.com熱心網友回復:
你可以寫例如
Rational operator *( const Rational &r, int x )
{
return { r.n * x, r.d };
}
Rational operator *( int x, const Rational &r )
{
return { r.n * x, r.d };
}
您可以多載用戶定義型別的運算子。對于二元運算子,至少一個運算元必須是用戶定義的型別。
來自 C 20 標準(12.4.2.3 運算式中的運算子)
2如果任一運算元的型別是類或列舉,則可以宣告實作此運算子的用戶定義的運算子函式,或者可能需要用戶定義的轉換來將運算元轉換為適合構建的型別-in 運算子。在這種情況下,多載決策用于確定要呼叫哪個運算子函式或內置運算子來實作運算子。因此,運算子符號首先轉換為表 15 中總結的等效函式呼叫符號(其中 @ 表示指定子條款中涵蓋的運算子之一)。但是,運算元按照為內置運算子 (7.6) 規定的順序進行排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/476492.html
