我有一个关于使用类和对象的作业[关闭]

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 ,但我更喜欢使用数学。

以上是关于我有一个关于使用类和对象的作业[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

18.03.14 类和对象作业2

PTA类和对象 题目总结

python关于类和正则表达( 编写一个程序(类))

5.关于类和对象

类和对象

OOP类和对象