簡體   English   中英

運算符與朋友和成員函數重載

[英]operator overloading with friend and member function

在類中,如果我們同時使用成員函數和朋友函數來重載+運算符,則給出錯誤,即“ operator +”的模棱兩可的重載如何解決

我建議將其實現為非成員函數。 這樣,您可以使用其他組合重載該功能。 例如,假設您有一個Point類和另一個Vector類(一個gometric矢量,不是std::vector )。

你可以超載

Point operator+(Point const&, Vector const&);
Point operator+(Vector const&, Point const&);

如果將其實現為成員函數,則只能在一個類中實現其中之一。 要實現這兩個功能,必須將第一個實現為Point的成員函數,將第二個實現為Vector的成員函數。

如果確實需要,可以對operator+進行成員和非成員重載。

Foo a, b;
a.operator+(b); //call member function
operator+(a, b); //call non-member function

但是,由於您必須實際寫出方法調用,因此它破壞了運算符的全部內容。


旁注:非成員operator+不必是朋友函數。 它很容易寫成:

Foo operator+ (Foo lhs, const Foo& rhs)
{
    return lhs += rhs;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM