Def*_*t99 1 c++ constructor class
我正在尝试创建一个名为"Game"的简单类,并为所有三个变量分配一些值.但是每次运行它时,屏幕上打印的值都是完全不相关的,我很确定它必须对类构造函数做一些事情,但我不知道到底是什么.代码是这样的:
#include <iostream>
#include <string>
using namespace std;
class Game
{
int id;
string name;
string winner;
public:
Game();
Game(int IDvalue, string NAMEvalue );
~Game();
void setId(int IDvalue);
void setName(string NAMEvalue);
void setWinner(string WINNERvalue);
int getId();
string getName();
string getWinner();
void status1();
};
Game::Game()
{
id = 0;
name = " ";
winner = " ";
}
Game::Game(int IDvalue, string NAMEvalue)
{
IDvalue = id;
NAMEvalue = name;
winner = " ";
}
Game::~Game()
{
}
void Game::setId(int IDvalue)
{
IDvalue = id;
}
void Game::setName(string NAMEvalue)
{
NAMEvalue = name;
}
void Game::setWinner(string WINNERvalue)
{
WINNERvalue = winner;
}
int Game::getId()
{
return id;
}
string Game::getName()
{
return name;
}
string Game::getWinner()
{
return winner;
}
void Game::status1()
{
cout << "Game's id : " << id << endl;
cout << "Game's type : " << name << endl;
cout << "Game's winner : " << winner << endl;
}
int main()
{
Game a(1, "Something");
a.setWinner("Someone");
a.status1();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你可能已经注意到了(我确定你有)我对C++很陌生,所以对我很轻松......
Game::Game(int IDvalue, string NAMEvalue)
{
IDvalue = id;
NAMEvalue = name;
winner = " ";
}
Run Code Online (Sandbox Code Playgroud)
大多数这些任务都是倒退的.为了保持一致,最后一行应该是
" " = winner;
Run Code Online (Sandbox Code Playgroud)
此构造不初始化id和name; 而不是它的分配的(垃圾)值id和name对参数IDvalue和NAMEvalue,这是在函数的局部变量,所以他们毁坏了,当构造函数返回,没有人能看到他们修改后的值.
固定:
Game::Game(int IDvalue, string NAMEvalue)
{
id = IDvalue;
name = NAMEvalue;
winner = " ";
}
Run Code Online (Sandbox Code Playgroud)
或更好:
Game::Game(int IDvalue, string NAMEvalue)
: id(IDvalue)
, name(NAMEvalue)
, winner(" ")
{
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你的setter函数有同样的问题.
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |