运算符重载模函数

时间:2019-02-05 01:22:49

标签: c++ operator-overloading

我应该对模函数进行重载,但是我不确定该怎么做。如果您需要更多信息,请告诉我。

这是我学校的要求:

会员功能,将Point绕原点旋转指定的度数。返回一个新的Point

在驱动程序文件中,我的学校希望使用模数函数来完成此方案:

点pt1(-50,-50);
  双角= 45;
  点pt2 = pt1%角度;

这是我尝试过的:

Point Point::operator%( int value)
{
    (int)x%value;

    (int)y%value;

    return *this;
}

//point.h file

 class Point
 {
   public:
       // Constructors (2)
  explicit Point(double x, double y); 

  Point();

   double getX() const;

   double getY() const;

   Point operator+(const Point& other)const ;

   Point& operator+(double value);

   Point operator*(double value) ;

   Point operator%(int value);

   Point operator-(const Point& other)const ;

   Point operator-(double value);

   Point operator^(const Point& other);

   Point operator+=(double value);
   Point& operator+=(const Point& other) ;

   Point& operator++();
   Point operator++(int); 

   Point& operator--(); 
   Point operator--(int); 

   Point& operator-();

        // Overloaded operators (14 member functions)
   friend std::ostream &operator<<( std::ostream &output, const Point 
  &point );
    friend std::istream &operator>>( std::istream  &input, Point 
  &point );

    // Overloaded operators (2 friend functions)

private:
  double x; // The x-coordinate of a Point
  double y; // The y-coordinate of a Point

    // Helper functions
  double DegreesToRadians(double degrees) const;
  double RadiansToDegrees(double radians) const;
};

 // Point& Add(const Point& other); // Overloaded operators (2 non-member, non-friend functions)
    // Point& Multiply(const Point& other);
    Point operator+( double value, const Point& other );
    Point operator-( double value, const Point& other );

1 个答案:

答案 0 :(得分:1)

我看到的第一个错误是您不遵守分配要求。您的分配明确要求您的类型来支持此操作:

Point pt1{-50, 50};
Point pt2 = pt1 % 45.5;

这表明您的操作员必须使用双精度对操作符返回一个点。您可以清楚地将角度存储为两倍,但是会收到一个整数。那不符合您的要求。此外,您返回一个旋转的点,但不是正确的点。您是在原地进行操作,而不是在新点上进行操作。在操作员内部,应使用新位置创建一个点。像这样:

Point Point::operator%(double) const {
    return Point{..., ...};
}

然后,您的操作有误。您只将点数据成员强制转换为int即可对其取模。模不做旋转。旋转通常使用正弦和余弦进行。您不能在int上使用C ++ %运算符进行旋转。