运算符重载作为成员函数
Operator Overloading as member function
为什么会报错。
class Complex{
int real,imaginary;
public:
Complex():real(0),imaginary(0){};
Complex(int real, int imaginary):real(real),imaginary(imaginary){};
int getreal()const{return real;}
int getimaginary()const{return imaginary;};
Complex &operator=(const Complex& );
Complex operator*(){
return Complex(real,-imaginary);
}
Complex operator+(const Complex &a, const Complex &d){
return Complex (d.getreal()+a.getreal(),a.getimaginary()+d.getimaginary());
}
};
尝试重载赋值运算符时。
Eroor 说:参数太多
我们可以将哪些运算符重载为成员函数,哪些不可以
将重载运算符定义为成员函数时,this
指针指向的对象隐式为第一个参数。所以你的运算符重载需要看起来像:
class Complex {
// ...
Complex operator+(const Complex &d) const {
return Complex (real + d.real, imaginary + d.imaginary);
}
};
请注意,您不需要 getter 函数,因为您已经可以访问 class.
中的数据成员
class 之外,即作为非成员函数,您的重载运算符完全没问题。
当重写具有左右参数的运算符时,您应该只传递右参数并像这样声明它:
Complex operator+(const Complex &d){
return Complex(d.getreal() + getreal(), getimaginary() + d.getimaginary());
}
这样做时,当您调用 getreal() 或直接访问该变量而不指定参数时,它将使用运算符的左参数。
一些不能重载的运算符是范围 (::)、三元 (:)、sizeof、成员访问 (.) 和其他一些。
为什么会报错。
class Complex{
int real,imaginary;
public:
Complex():real(0),imaginary(0){};
Complex(int real, int imaginary):real(real),imaginary(imaginary){};
int getreal()const{return real;}
int getimaginary()const{return imaginary;};
Complex &operator=(const Complex& );
Complex operator*(){
return Complex(real,-imaginary);
}
Complex operator+(const Complex &a, const Complex &d){
return Complex (d.getreal()+a.getreal(),a.getimaginary()+d.getimaginary());
}
};
尝试重载赋值运算符时。 Eroor 说:参数太多
我们可以将哪些运算符重载为成员函数,哪些不可以
将重载运算符定义为成员函数时,this
指针指向的对象隐式为第一个参数。所以你的运算符重载需要看起来像:
class Complex {
// ...
Complex operator+(const Complex &d) const {
return Complex (real + d.real, imaginary + d.imaginary);
}
};
请注意,您不需要 getter 函数,因为您已经可以访问 class.
中的数据成员class 之外,即作为非成员函数,您的重载运算符完全没问题。
当重写具有左右参数的运算符时,您应该只传递右参数并像这样声明它:
Complex operator+(const Complex &d){
return Complex(d.getreal() + getreal(), getimaginary() + d.getimaginary());
}
这样做时,当您调用 getreal() 或直接访问该变量而不指定参数时,它将使用运算符的左参数。
一些不能重载的运算符是范围 (::)、三元 (:)、sizeof、成员访问 (.) 和其他一些。