C ++类变量不打印分配的正确值

时间:2018-05-06 14:44:12

标签: c++ class constructor

我正在尝试创建一个名为“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;
}

你可能已经注意到了(我确定你有)我对C ++很陌生,所以对我很轻松......

2 个答案:

答案 0 :(得分:5)

Game::Game(int IDvalue, string NAMEvalue)
{
    IDvalue = id;
    NAMEvalue = name;
    winner = " ";
}

这些作业中的大多数都是倒退的。为了保持一致,最后一行应该是

" " = winner;

此构造函数未初始化idname;相反,它将idname的(垃圾)值分配给参数IDvalueNAMEvalue,它们是函数中的局部变量,因此它们&# 39;当构造函数返回时重新销毁,没有人能看到它们的修改值。

修正:

Game::Game(int IDvalue, string NAMEvalue)
{
    id = IDvalue;
    name = NAMEvalue;
    winner = " ";
}

或更好:

Game::Game(int IDvalue, string NAMEvalue)
    : id(IDvalue)
    , name(NAMEvalue)
    , winner(" ")
{
}

顺便说一下,你的setter函数有同样的问题。

答案 1 :(得分:3)

您正在为第二个构造函数和set函数分配成员变量而不是反之亦然。

Game::Game(int IDvalue, string NAMEvalue)
{
    IDvalue = id;       -->      id   = IDvalue;    OR setID(id);
    NAMEvalue = name;   -->      name = NAMEvalue; OR setName(name);
    winner = " ";
}

void Game::setId(int IDvalue)
{
    IDvalue = id;        -->     id = IDvalue;
}


// ... the rest of the set functions