Pola instancji zachowujące się jak statyczne?

0

Witam. Na uczelnię muszę napisać banalny program tworzący, tasujący i zwracający karty. Stworzyłem poniższą klasę:

Card.h
#pragma once
#include <string>

class Card
{
public:
	Card(int face, int suit);
	std::string toString() const;
};

Card.cpp
#include <string>
#include <array>
#include "Card.h"

using namespace std;

const static array<string, 13> Faces = { "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" };
const static array<string, 4> Suits = { "Hearts", "Spades", "Diamonds", "Clubs" };

int _face = 0;
int _suit = 0;

Card::Card(int face, int suit)
{
	_face = face;
	_suit = suit;
}

string Card::toString() const
{
	return Faces[_face] + " of " + Suits[_suit];
}

Oczywiście zdaję sobie sprawę że mógłbym użyć typu enum zamiast używać int'ów itp. ale program ma być napisany zgodnie z wytycznymi. Nie jest to również istotą problemu. Mianowicie kiedy tworzę obiekt typu **Card **i przekazuję do konstruktora wartości 4 i 3 to wywołanie toString() prawidłowo zwraca Five of Clubs. Jednakże jeśli wykonam poniższy kod:

	Card card(4, 3);
	Card card2(6, 2);

	cout << card.toString() << endl;
	cout << card2.toString() << endl;

to w konsoli otrzymuję dwa razy Seven of Diamonds zamiast Five of Clubs i Seven of Diamonds. Wychodzi na to że zmienne _face i _suit nie należą do instancji klasy.

Nie mam pojęcia dla czego tak się dzieje. Co robię źle?

1
class Card
{
public:
int _face;  //+
int _suit;   //+
    Card(int face, int suit);
    std::string toString() const;
};

...
int _face = 0;    // -
int _suit = 0;     //-

1

Bo nie należą, stworzyłeś sobie po prostu 2 globalne zmienne.

0

Ok to ma sens, pomieszałem trochę pliki .h i .cpp. Dzięki za odpowiedzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1