2017-10-20 61 views
0

我想了解運算符在C++中的重載。我的第一個問題是,我們可以添加兩個對象並將其值存儲在變量中嗎?我試過這個,但得到了一個錯誤,在這個範圍內沒有定義lx和ly。其次,我想在添加後顯示結果,我應該給出什麼命令來顯示結果?如果我添加兩個對象,我可以提到數據類型爲int,如我在下面的代碼中所述?運算符重載應該是什麼數據類型和變量的範圍?

class Rectangle 
{ 

private: 
int L; 
int B; 

public: 
lx; 
ly; 
Rectangle() //default constructor 
{ 
    L = 2; 
    B = 2; 
} 

Rectangle(int l,int b)  //parametrized constructor 
{ 
    L = l; 
    B = b; 
} 

int operator+ (Rectangle obj2) //operator overloading 
{ 

    lx = this->L + obj2.L; 
    ly = this->B + obj2.B; 
    return lx,ly; 

} 

void Display() 
{ 
    cout<< "length is " << L <<endl; 
    cout<< "breadth is " << B <<endl; 
} 

}; 

int main() 
{ 
Rectangle R1; 
R1.Display(); 

Rectangle R2(5,3); 
R2.Display(); 

return 0; 



} 
+2

'return lx,ly'可能不是你認爲的那樣。 –

+1

在類聲明中,''public''後面的'lx'之前和'ly'之前忘記了'int' –

+2

您確定編譯?您尚未指定數據成員'lx'和'ly'的類型。 –

回答

1

這一切首先是錯誤的

public: 
lx; 
ly; 

你需要寫:

public: 
int lx; 
int ly; 

然後你重載+運營商應該返回一個Rectangle而不是int

Rectangle operator+(const Rectangle & obj2) 
{ 
    Rectangle result; 
    result.L = L + obj2.L; 
    result.B = B + obj2.B; 
    return result; 
} 

或者更簡單:

Rectangle operator+(const Rectangle & obj2) 
{ 
    Rectangle rec(L + obj2.L, B + obj2.B); 
    return rec; 
} 

或者簡單:

Rectangle operator+(const Rectangle & obj2) 
{ 
    return Rectangle(L + obj2.L, B + obj2.B); 
} 

你這樣稱呼它:

Rectangle r3 = R1 + R2; 

constoperator+(const Rectangle & obj2)+是不是絕對必要的,你也可以像你在初次嘗試時那樣寫operator+(Rectangle obj2)

使用&稍微高效一些,因爲它可以防止參數被複制,並且const可以防止程序員修改參數,這會在使用&時修改操作數。

+2

因爲它不修改'* this',所以你也可以使'operator +'''const'成員函數。 –

2

將成員變量的加法結果存儲似乎沒有任何意義。 你想添加兩個Rectangle對象,返回值在邏輯上也應該是一個Rectangle。

這是重載operator +並打印結果的常用方法。

 #include <iostream> 

    class Rectangle 
    { 
    private: 
     int L; 
     int B; 

    public: 
    // int lx; 
    // int ly; 

    Rectangle() //default constructor 
    { 
     L = 2; 
     B = 2; 
    } 

    Rectangle(int l,int b)  //parametrized constructor 
    { 
     L = l; 
     B = b; 
    } 

    Rectangle operator+ (Rectangle obj2) //operator overloading 
    { 
     Rectangle rec (this->L + obj2.L, this->B + obj2.B); 
     return rec; 
    } 
    void Display() 
    { 
     std::cout<< "length is " << L <<std::endl; 
     std::cout<< "breadth is " << B <<std::endl; 
    } 
}; 

int main() 
{ 
    Rectangle R1; 
    R1.Display(); 

    Rectangle R2(5,3); 
    R2.Display(); 

    Rectangle R3 = R1 + R2; 
    R3.Display(); 
    return 0; 
}