解释为啥类不存储和打印输入的值

Posted

技术标签:

【中文标题】解释为啥类不存储和打印输入的值【英文标题】: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 返回一些东西,它不打印一些东西。 【参考方案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,在你的例子中

以上是关于解释为啥类不存储和打印输入的值的主要内容,如果未能解决你的问题,请参考以下文章

为啥在PL/Sql程序运行时打印新旧值。?

为啥输入的值没有传递给 VUEX

python打印菱形

为啥需要以只读方式输入 SQL Server 存储过程的表值参数?

为啥 Java 的数字类不相互扩展?

为啥我的班级不使用我给它的值?