2017-10-20 8 views
0

私はC++で演算子のオーバーロードを理解しようとしています。私の最初の質問は、2つのオブジェクトを追加してその値を変数に格納できるかどうかです。私はこれを試しましたが、lxとlyがこのスコープで定義されていないというエラーがありました。次に、結果を表示するためにどのようなコマンドを追加する必要がありますか? 2つのオブジェクトを追加すると、次のコードで説明したように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'の前に 'int'を、' public'の直前に '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&を使用する場合、オペランドを変更することになる引数を変更するからプログラマを防止するため&を使用

はslighlyより効率的です。

+2

あなたは '* this'を変更しないので、' operator + 'を' const'メンバ関数にすることもできます。 –

2

メンバー変数に加​​算結果を格納することは意味をなさないようです。 2つの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; 
} 
関連する問題