Pola instancji zachowujące się jak statyczne?

Pola instancji zachowujące się jak statyczne?
Aventus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: UK
  • Postów: 2235
0

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

Kopiuj
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:

Kopiuj
	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?

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

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

spartanPAGE
  • Rejestracja: dni
  • Ostatnio: dni
1

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

Aventus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: UK
  • Postów: 2235
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.