2017-10-20 25 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; 
}