簡體   English   中英

在C ++中重寫運算符的首選方法是什么

[英]What is the preferred way to override operators in C++

我總是像這樣覆蓋運算符:

class MyClass {
public:
    ...
    MyClass operator+(const MyClass&) const;

private:
    int some_number = 5;
}

MyClass MyClass::operator+(const MyClass& rhs) const
{
    return MyClass(some_number + rhs.some_number);
}

但是今天我意識到您也可以使用'friend'關鍵字創建運算符:

class MyClass {
public:
...
friend MyClass operator+(const MyClass&, const MyClass&);

private:
    int some_number = 5;
} 

MyClass operator+(const MyClass& lhs, const Myclass& rhs)
{
    return MyClass(lhs.some_number + rhs.some_number);
}

考慮到我想要左側和右側運算符並且我也(嘗試)遵循“核心准則”,哪種方法是首選?

首選的方法是甚至不讓它成為朋友:

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

當然,這確實依賴於operator+=但這是更基本的操作。 +=更改其左側,應為成員。

暫無
暫無

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

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