Operator Overloading in struct

后端 未结 4 1609
無奈伤痛
無奈伤痛 2021-02-07 11:39

Suppose I define this structure:

struct Point {
   double x, y;
};

How can I overload the + operator so that, declared,

         


        
相关标签:
4条回答
  • 2021-02-07 11:54

    In C++ there's only one difference between a struct and a class: in a struct the default visibility is public while in a class it is private.

    Other than that you can do anything you would do in a class in a struct and it will look exactly the same.

    Write operator overloading in a struct as you would in a class.

    0 讨论(0)
  • 2021-02-07 12:03

    Just do it:

    Point operator+( Point const& lhs, Point const& rhs );
    Point operator+( Point const& lhs, double rhs );
    Point operator+( double lhs, Point const& rhs );
    

    With regards to your last question, the compiler makes no assumptions concerning what your operator does. (Remember, the + operator on std::string is not commutative.) So you have to provide both overloads.

    Alternatively, you can provide an implicit conversion of double to Point (by having a converting constructor in Point). In that case, the first overload above will handle all three cases.

    0 讨论(0)
  • 2021-02-07 12:06

    This will also work:

    struct Point{
        double x,y;
        Point& operator+(const Point& rhs){ 
                x += rhs.x;
                y += rhs.y;
                return *this;
        }
    }
    
    0 讨论(0)
  • 2021-02-07 12:19

    Here is how I would do it.

    struct Point {
       double x, y;
       struct Point& operator+=(const Point& rhs) { x += rhs.x; y += rhs.y; return *this; }
       struct Point& operator+=(const double& k) { x += k; y += k; return *this; }
    };
    
    Point operator+(Point lhs, const Point& rhs) { return lhs += rhs; }
    Point operator+(Point lhs, const double k) { return lhs += k; }
    Point operator+(const double k, Point rhs) { return rhs += k; }
    
    0 讨论(0)
提交回复
热议问题