【问题标题】:Explaining why classes are not storing and printing out entered value解释为什么类不存储和打印输入的值
【发布时间】:2015-12-06 23:27:49
【问题描述】:

我是类新手,我必须在一个类中编写自己的函数和变量,该类在输入时存储流动站信息,并且出于某种原因,每当我编写函数并尝试在 main 中调用它们时它们都不起作用。我已经提供了我的代码,我想知道是否有人可以帮助我解释如何为每个流动站 r1-r5 存储流动站数据。谢谢。

class Rover{

private:

    string name;
    int xpos;
    int ypos;
    string direction; //Use Cardinal Directions (N,S,E,W)
    int speed; //(0-5 m/sec)
    public:
    //Constructors
    //defaultRover();
    //Rover();
//Get functions
string getName();
int getXpos();
int getYpos();
string getDirect();
int getSpeed();
void getRoverData();

//Set functions
string setName();
void setXpos();
void setYpos();
void setDirect();
void setSpeed();
};
//Constructor function
/*Rover::defaultRover()
{
    xpos=0;
    ypos=0;
    direction="N";
    speed=0;
}
*/
/*
   Rover::Rover()
   {
       cout<<"Please enter the starting X-position: ";
       cin>>xpos;
       cout<<"Please enter the starting Y-position: ";
       cin>>ypos;
       cout<<"Please enter the starting direction (N,S,E,W): ";
       cin>>direction;
       cout<<"Please enter the starting speed (0-5): ";
       cin>>speed;

       cout<<endl;
   }
*/
//Getter functions
string Rover::getName()
{
    return name;
}

int Rover::getXpos()
{
    return xpos;
}

int Rover::getYpos()
{
    return ypos;
}

string Rover::getDirect()
{
    return direction;
}

int Rover::getSpeed()
{
    return speed;
}

void Rover::getRoverData()
{
    cout<<name;
    cout<<xpos;
    cout<<ypos;
    cout<<direction;
    cout<<speed;
}

//Setter functions
string Rover::setName()
{
    cout<<"Please enter the Rover name ";
    cin>>name;

}

void Rover::setXpos()
{
    cout<<"Please enter the X-position of the Rover ";
    cin>>xpos;
}

void Rover::setYpos()
{
    cout<<"Please enter the Y-position of the Rover ";
    cin>>ypos;
}

void Rover::setDirect()
{
    cout<<"Please enter the direction of the Rover (N,S,E,W) ";
    cin>>direction;
}

void Rover::setSpeed()
{
    cout<<"Please enter the speed of the Rover (0-5) ";
    cin>>speed;
}


int main(int argc, char** argv)
{

    Rover r1, r2, r3, r4, r5;

    r1.setName();
    r1.getName();

    return 0;
}

【问题讨论】:

  • 这不可能是你的全部代码。你在哪里定义的属性?在课堂范围内?你确定你没有将它们定义为静态的。
  • 你在问题​​中说输入的值没有被打印,但你实际上并没有打印任何东西 - 也许你想在 main 中写 cout &lt;&lt; r1.getName() &lt;&lt; endl;
  • 我建议回去阅读你的 C++ 书,这对每个人都会更有益。
  • 我们没有书。我需要的只是被告知如何做 1 个变量,我可以弄清楚其余的。我使用我的 get 函数来打印变量,所以当我调用 r1.setName();在 main 中,我想输入一个变量的名称并使用 r1.getName();打印出来
  • getName 返回一些东西,它不打印一些东西。

标签: c++ string function class setter


【解决方案1】:

一般来说...

getter 和 setter 不应与 stdin 或 stdout 通信

  • getter 应该return 他们得到什么
  • setter 应该将成员分配给传入的内容

让我们做一个假装类Foo

class Foo {
  public:  
      // setters
      void set_bar(int bar) { bar_ = bar; }
      void set_baz(std::string baz) { baz_ = baz; }
      void set_boo(double boo) { boo_ = boo; }
      // getters
      int get_bar() const { return bar_; }
      std::string get_baz() const { return baz_; }
      double get_boo() const { return boo_; }
  private:
    int bar_;
    std::string baz_;
    double boo_;
};

这个应该使用的方式是这样的:

Foo foo;
int bar;
std::cout << "Please enter bar: " << std::endl;
std::cin >> bar;
foo.set_bar(bar);
std::cout << "foo's bar is " << foo.get_bar() << std::endl;

您需要更改很多代码,但我希望这会有所帮助。

【讨论】:

  • 非常感谢您,所以基本上我需要做的是为 setName(string name_) 设置新变量,例如 name_,然后可以帮助我的 setNAme 是什么?会是 setName(string name_){cout>名称_; name=name_;}
  • 看我的例子。你可以弄清楚这一点。
  • 感谢您的帮助,我现在正在处理它,我还有一个问题。我已经按照你所说的方式声明了所有变量,现在当我拥有 Rover r1 时;在主要它给我一个错误,这将是 Foo foo,在你的例子中
猜你喜欢
  • 1970-01-01
  • 2016-07-01
  • 2021-12-23
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多