[英]When overloading methods in C++, is it possible to consider the equal operator and assign the return value to another class instance?
是否可以在 class 中使用一種方法來修改其自己的 class 實例,但通過重載它還可以修改另一個 class 實例,甚至創建一個新實例,例如使用等號? 還是我需要以特殊方式重載運算符?
像這樣的東西:
class MyClass{
public:
MyClass() {};
MyClass(int x): number(x) {};
void increaseNumber(){
number++;
}
MyClass increaseNumber() const{
MyClass tempObj(this->number);
tempObj.number++
return tempObj;
}
private:
int number = 0;
}
int main(){
MyClass a(10);
a.increaseNumber(); // -> a.number == 11
MyClass b = a.increaseNumber() // -> b.number == 12 ???
}
首先,我希望我正確理解了您的問題,如果您不是這個意思,請糾正我。 只要更改簽名,就可以完成重載。 在您的代碼中,簽名由 const 關鍵字更改,也返回類型。 我可以給你一個在同一個 class 中重載等號兩次的例子,如下所示:
第一個實現用作默認副本,您將 rhs 復制到 lhs,而第二個實現移動數據而不復制。
class Factor {
int _n = 0;
int _d = 1;
public:
Factor & operator = (const Factor &);
Factor & operator = (Factor &&) noexcept;
Factor & Factor::operator = ( const Factor & rhs ) {
message("op =");
if( this != &rhs ) {
_n = rhs.numerator();
_d = rhs.denominator();
}
return *this;
}
Factor & Factor::operator = ( Factor && rhs ) noexcept {
message("op move =");
if ( this != &rhs ) {
_n = std::move(rhs._n);
_d = std::move(rhs._d);
rhs.reset();
}
return *this;
}
作為對我的結論和對我自己問題的回答:
您不能通過更改返回類型但保持相同的參數來重載方法。 因此,為此您必須定義一個具有不同名稱的方法。
如果使用另一個已經存在的 class 實例和等號初始化 class 實例,則調用(復制?)構造函數而不是賦值運算符。 例如:
MyClass a(10); MyClass b = a;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.