解释为啥类不存储和打印输入的值
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 << r1.getName() << 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,在你的例子中以上是关于解释为啥类不存储和打印输入的值的主要内容,如果未能解决你的问题,请参考以下文章