我有一个关于使用类和对象的作业[关闭]
Posted
技术标签:
【中文标题】我有一个关于使用类和对象的作业[关闭]【英文标题】:I have a homework about using class and object [closed] 【发布时间】:2020-11-05 18:17:20 【问题描述】:我不知道如何为 turn() 编写代码以从左到右改变方向,反之亦然。请帮忙!我刚开始学习 C++。
[![我的 .h 文件][2]][2]
【问题讨论】:
欢迎来到 Stack Overflow!请将您的代码发布为文本,而不是图像。对于由于某种原因看不到图像的人,您的问题是无法回答的。turn
不是唯一的问题。 move
也坏了。您需要仔细阅读要求,并仔细考虑它们。
【参考方案1】:
目前move()
中的位置已更改。
它总是增加1
,所以它总是朝一个方向移动。
direction
目前对position
没有影响。
您应该更改move()
以将position
增加direction
。这看起来像position += direction
。
现在direction
更改时position
更改,但目前direction
基于position
更改,这不应该是这种情况。
您应该更改turn()
以反转方向,因此如果是1
,请将其更改为-1
,反之亦然。将当前定义替换为 direction = -direction
即可。
更新
Bug 头文件:
#ifndef H27_H_
#define H27_H_
/** A bug climbing a pole. */
class Bug
public:
Bug(int startPos); // construct Bug at starting position
void move(); // move bug one unit in direction
void turn(); // Change the direction from left to right or vice-versa
int position() const; // Return the position
private:
int position_;
int direction_;
;
#endif
错误源文件:
#include "Bug.h"
Bug::Bug(int startPos)
position_ = startPos;
direction_ = 1;
void Bug::move()
position_ += direction_;
void Bug::turn()
direction_ = -direction_;
int Bug::position() const
return position_;
主要测试文件:
#include "Bug.h"
#include <iostream>
using namespace std;
int main()
cout << "Testing Bugs -------------------" << endl;
// create bugs
cout << "Constructing sam at position 2";
Bug sam(2);
cout << "->" << sam.position() << endl;
cout << "Constructing julie at position 12";
Bug julie(12);
cout << "->" << julie.position() << endl;
cout << "Constructing fred at position -10";
Bug fred(-10);
cout << "->" << fred.position() << endl;
// move sam
cout << "Moving sam one to the right";
sam.move();
cout << "->" << sam.position() << endl;
cout << "Moving sam one more to the right";
sam.move();
cout << "->" << sam.position() << endl;
// move fred
cout << "Moving fred one to the left";
fred.turn();
fred.move();
cout << "->" << fred.position() << endl;
cout << "Moving fred one more to the left";
fred.move();
cout << "->" << fred.position() << endl;
cout << "Moving fred back two places to the right";
fred.turn();
fred.move();
fred.move();
cout << "->" << fred.position() << endl;
【讨论】:
我听从你的建议。当 bug 向左移动时,我得到了正确的结果,但当它向右移动时,我得到了错误的结果。 您得到的错误结果是什么?您期望的正确结果是什么?错误不再向右移动了吗? 检查功能:测试错误 ------------------- + 在位置 2->2 构造 sam + 在位置 12->12 构造 julie + 在位置 -10->-10 处构造 fred + 将 sam 向右移动 1 个。->3 + 将 sam 再向右移动 1 个。->4 + 将 fred 向左移动 1 个。->-11 + 将 fred 移动一个向左移动。->-12 X 将 fred 向右移动两个位置。:预期为“-10”,但找到“-14” 非常感谢。我在 turn() 中添加了一个 if。如果 (direction_ ==1) -> direction_ = - 方向。 没问题。因此,您的代码所做的只是在方向朝右时反转方向,因此当方向朝左时,它不会再次反转方向。如果您想使用 if 语句,您可以使用if (direction_ == 1) direction_ = -1 else direction_ = 1
,但我更喜欢使用数学。以上是关于我有一个关于使用类和对象的作业[关闭]的主要内容,如果未能解决你的问题,请参考以下文章