目标是 为了能够知道什么是运算符函数 为了能够定义二元和一元运算符能够使用运算符新建和删除 能够将其他类的对象定义为类成员 问题 定义一个坐标为x的Point类和y。重新定义一个Robot类。你会做: (1)(1)初始化当创建Robot对象时指示机器人位置的点;(2)在给定点处画出机器人;3)使用方向键移动机器人; (4)输出Robot对象位置的过载运算符<<;(5)过载操作员()来重置Robot对象的位置; (6)过载操作符+=或-=放大或缩小机器人对象(选项) 分配要求 1.根据您的设计,定义Point和Robot类。 2.编写一个测试程序,使用operatornew创建一个Robot对象。
时间: 2024-03-13 08:43:45 浏览: 220
以下是根据题目要求设计的Point类和Robot类的定义及测试程序:
```cpp
#include <iostream>
class Point {
public:
Point(int x = 0, int y = 0) : x(x), y(y) {}
int getX() const { return x; }
int getY() const { return y; }
private:
int x, y;
};
class Robot {
public:
Robot(int x = 0, int y = 0) : pos(x, y) {}
void draw() const {
std::cout << "Draw robot at (" << pos.getX() << ", " << pos.getY() << ")" << std::endl;
}
void move(int dx, int dy) {
pos = Point(pos.getX() + dx, pos.getY() + dy);
}
void reset(int x, int y) {
pos = Point(x, y);
}
Robot operator+(const Robot& other) const {
return Robot(pos.getX() + other.pos.getX(), pos.getY() + other.pos.getY());
}
Robot operator-(const Robot& other) const {
return Robot(pos.getX() - other.pos.getX(), pos.getY() - other.pos.getY());
}
friend std::ostream& operator<<(std::ostream& os, const Robot& robot) {
os << "Robot at (" << robot.pos.getX() << ", " << robot.pos.getY() << ")";
return os;
}
private:
Point pos;
};
int main() {
// 使用operator new创建Robot对象
Robot* pRobot = new Robot(10, 20);
// 画出机器人
pRobot->draw();
// 移动机器人
pRobot->move(5, -10);
// 画出移动后的机器人
pRobot->draw();
// 重置机器人位置
pRobot->reset(0, 0);
// 画出重置后的机器人
pRobot->draw();
// 使用重载的+运算符创建一个新的机器人
Robot robot2(5, 5);
Robot robot3 = *pRobot + robot2;
robot3.draw();
// 使用重载的-运算符创建一个新的机器人
Robot robot4 = *pRobot - robot2;
robot4.draw();
// 使用重载的<<运算符输出机器人位置
std::cout << *pRobot << std::endl;
// 使用重载的()运算符重置机器人位置
(*pRobot)(15, 25);
pRobot->draw();
// 释放内存
delete pRobot;
return 0;
}
```
在以上程序中,Point类表示坐标点,Robot类表示机器人,使用Point类作为Robot类的成员来表示机器人的位置。Robot类定义了构造函数、画机器人、移动机器人、重置机器人位置、重载加减运算符、重载输出运算符和重载括号运算符等成员函数。在测试程序中,使用operator new创建了一个Robot对象,然后测试了Robot类的各种功能,并且在结束程序前使用delete释放了内存。
阅读全文