简体   繁体   中英

Operator Overloading as member function

Why is it giving the error.

 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());
    }


  };

When trying to overload the assingment operator. Eroor says: too many parameter

What operators can we overload as member function and what not

When defining an overloaded operator as a member function , the object pointed at by the this pointer is implicitly the first argument. So your operator overload needs to look like:

class Complex {
  // ...
  Complex  operator+(const Complex &d) const {
    return  Complex (real + d.real, imaginary + d.imaginary);
  }
};

Note that you don't need the getter functions, since you already have access to the data members inside the class.

Outside the class, ie as a non-member function, your overloaded operator is perfectly fine.

When overriding operators that have left and right parameters, you should just pass the right parameter and declare it like this:

Complex operator+(const Complex &d){
    return Complex(d.getreal() + getreal(), getimaginary() + d.getimaginary());
}

When doing that, when you call getreal() or directly access that variable without specifing the parameter, it will use the left parameter of the operator.

Some of the operators that cannot be overloaded are scope (::), ternary (:), sizeof, member access (.) and some others.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM