[C++]Definire un'istanza costante

di il
6 risposte

[C++]Definire un'istanza costante

Ho la classe carta avente questi attributi:
class Carta
{
	private:
		string seme; // seme della carta
		string nome; // nome della carta (fante, asso, ecc.)
		int numero; // numero della carta (1-10)
		int punteggio; // punteggio della carta
};
questa classe è aggregata alla classe mazzo che tramite l'operator-- restituisce una carta estratta a caso dal mazzo:
Carta Mazzo::operator-- (void)
{
	if (carteAttuali > 0)
	{
		int posRandom = rand() % carteAttuali;
		Carta estratta = carte[posRandom];
		carte[posRandom] = carte[carteAttuali - 1];
		--carteAttuali;
		return estratta;
	}
	else
	{
		cerr << "Mazzo vuoto." << endl;
		return Carta("", "", 0, 0);
	}
}
ora volevo sapere se esiste un metodo per evitare di scrivere ogni volta il pezzo Carta("", "", 0, 0) e magari definire questa specie di carta ""vuota"" come una costante. sarebbe comodo poiché questa carta ""vuota"" viene restituita (in alcuni casi) anche da altri metodi.
il mio dubbio però è anche un altro: ammettendo che si possa dichiarare un'istanza costante, dove si mette? è possibile dichiararla nel file .cpp della classe o devo farlo per forza nel main? perché se fosse in quest'ultimo caso risulterebbe abbastanza inutile farlo, dato che le implementazioni dei metodi (che utilizzano la carta ""vuota"") sono tutte nei file .cpp delle rispettive classi...

6 Risposte

  • Re: [C++]Definire un'istanza costante

    Sono un po' perplesso, spiega meglio
  • Re: [C++]Definire un'istanza costante

    +m+ ha scritto:


    sono un po' perplesso, spiega meglio
    vorrei che l'istanza di carta avente seme = "", nome = "", numero = 0 e punteggio = 0 fosse una costante dichiarata (sempre se è possibile fare un'istanza costante) nel file .cpp della classe.
    un po' come per i colori: nelle librerie grafiche rgb ci sono alcune costanti (red, green, blue e altre) per non stare ogni volta a scrivere Color (255, 0, 0) quando ti serve il rosso... una cosa simile, insomma.
  • Re: [C++]Definire un'istanza costante

    Potresti creare un'istanza di "comodo" che viene utilizzata in questi casi.
  • Re: [C++]Definire un'istanza costante

    candaluar ha scritto:


    Potresti creare un'istanza di "comodo" che viene utilizzata in questi casi.
    ho provato a dichiarare in carta.cpp
    static const Carta VOID = Carta("", "", 0, 0);
    però se utilizzo VOID in mazzo dice che è una variabile non dichiarata...
  • Re: [C++]Definire un'istanza costante

    Non credo tu possa definirla const
  • Re: [C++]Definire un'istanza costante

    candaluar ha scritto:


    Non credo tu possa definirla const
    sì, si può, l'errore era un altro, smanettando "a caso" con il codice son riuscito a trovare la soluzione.
    va dichiarata come membro const static della classe e nel file .cpp va definito così:
    const Carta Carta::VOID = Carta("", "", 0, 0);
    grazie mille a tutti per l'aiuto.
Devi accedere o registrarti per scrivere nel forum
6 risposte