Переменные класса C ++ не печатают правильные назначенные значения - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь создать простой класс под названием «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 голосов
/ 06 мая 2018
Game::Game(int IDvalue, string NAMEvalue)
{
    IDvalue = id;
    NAMEvalue = name;
    winner = " ";
}

Большинство из этих заданий задом наперед. Чтобы быть последовательным, последняя строка должна была быть

" " = winner;

Этот конструктор не инициализирует id и name; вместо этого он присваивает (мусорные) значения id и name параметрам IDvalue и NAMEvalue, которые являются локальными переменными в функции, поэтому они уничтожаются, когда возвращается конструктор, и никто не может видеть их измененные значения.

Fix:

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

Или лучше:

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

Кстати, у ваших функций сеттера такая же проблема.

0 голосов
/ 06 мая 2018

Вы присваиваете переменные-члены параметрам, а не наоборот во втором конструкторе и 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...