我应该对模函数进行重载,但是我不确定该怎么做。如果您需要更多信息,请告诉我。
这是我学校的要求:
会员功能,将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 );
答案 0 :(得分:1)
我看到的第一个错误是您不遵守分配要求。您的分配明确要求您的类型来支持此操作:
Point pt1{-50, 50};
Point pt2 = pt1 % 45.5;
这表明您的操作员必须使用双精度对操作符返回一个点。您可以清楚地将角度存储为两倍,但是会收到一个整数。那不符合您的要求。此外,您返回一个旋转的点,但不是正确的点。您是在原地进行操作,而不是在新点上进行操作。在操作员内部,应使用新位置创建一个点。像这样:
Point Point::operator%(double) const {
return Point{..., ...};
}
然后,您的操作有误。您只将点数据成员强制转换为int
即可对其取模。模不做旋转。旋转通常使用正弦和余弦进行。您不能在int上使用C ++ %
运算符进行旋转。