Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/07/2007, à 20:23

Helldream

[Résolu][C++] Les classes et leur utilisation... (faux débutant)

Bonjour,

Je suis webmaster, et j'ai déjà fait de la programmation en C++... Il y a 2 ans. Cependant, ce n'était pas ma tasse de thé, et ces deux ans ont été fatals. Bref, je m'y remet.

J'ai une première classe, awale, qui contient des méthodes publiques par exemple prendre_graines(). Une deuxième, joueur, qui appelle des méthodes de la premières. Par exemple dans joueur::jouer(), j'utilise awale::prendre_graines(). Mon soucis est que je ne me rappelle plus du tout comment faire ça :S

Voici mon code actuel :

#include <iostream>

using namespace std;

class awale
{
	private:
		int	i;
		int	jeu[12];

	public:
		awale()
		{
			for(i=0;i<12;i++)
			{
				jeu[i]=4;
			}
		}
		
		void	afficher()
		{
			for (i=0;i<6;i++)
			{
				cout << jeu[i] << ' ';
			}
			cout << endl;
			for (i=6;i<12;i++)
			{
				cout << jeu[i] << ' ';
			}
			cout << endl;
		}
		
		int	nb_graines(int n)
		{
			return jeu[n];
		}
		
		float	prendre_graines(int n)
		{
			jeu[n]=0;
		}
		
		float	ajouter_graine(int n)
		{
			jeu[n]++;
		}
};

class joueur
{

	private:
		int	score;
		
	public:
		joueur()
		{
			score=0;
		}
		
		bool	jouer(int n)
		{
			if (nb_graines(n)!=0)
			{
				int m=n;
				int nb=nb_graines(n);
				prendre_graines(n);
				for (int i=1;i<=nb;i++)
				{
					m++;
					if (m==12)
					{
						m=0;
					}
					ajouter_graine(m);
				}
				while ((nb_graines(m)==2 || nb_graines(m)==3) && m>=0 && m<6)
				{
					score+=nb_graines(m);
					prendre_graines(m);
					m--;
				}
			}
			else
			{
				return false;
			}
			
		}
};

int main()
{
	awale jeu;
	joueur joueur1;
	
	int n;
	
	jeu.afficher();
	do
	{
		cin >> n;
		n+=5;
		joueur1.jouer(n);
	}
	while (n>0 && n<=6);
	return 0;
}

Je sais qu'il faudrait que je sépare le tout dans différents fichiers, que je mette des noms plus parlant à mes variables, que je n'utilise pas de namespace pour mes classes... Bref pour le moment, je m'intéresse principalement à l'utilisation des objets wink

Quelqu'un pourrait-il me donner une piste? Merci d'avance!

Dernière modification par Helldream (Le 29/07/2007, à 14:18)

Hors ligne

#2 Le 26/07/2007, à 21:51

Nanawel

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Hum cela n'est peut être pas tout mais les noms des méthodes de tes classes doivent être définies comme ceci :

dans le fichier MaClasse.h

class MaClasse
{
    public:
        void maMethodeVoid();
        int maMethodeInt();
};

et dans le fichier MaClasse.C

#include "MaClasse.h"

void MaClasse::maMethodeVoid()
{ ... }
int MaClasse::maMethodeInt()
{ ... }

Un fichier = une classe et réciproquement...

Mais le mieux est peut être que tu regardes sur developpez.com, ça sera beaucoup mieux expliqué !


EDIT: laisse moi deviner... tu as fait du PHP ou du Java toi non ? wink

Dernière modification par Nanawel (Le 26/07/2007, à 21:52)

Hors ligne

#3 Le 26/07/2007, à 21:58

AuraHxC

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Je vois pas le rapport avec le java => parce que perso que ca soit en java ou C++ je fais exactement ce que tu dis un fichier par classe...

Hors ligne

#4 Le 26/07/2007, à 22:09

Helldream

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Oui oui j'ai fait du php 4 et 5 (j'en fais même tous les jours, encore maintenant), et j'ai fait du java, il fut un temps. Mais à la base j'ai un diplome d'analyste programmeur (j'ai eu des cours de C, C+, et java + algorythmie, BDD, ...). Mais bon, forcément entre des langages que j'ai vu en cours il y a 2 ans, mais que je n'ai plus utilisé depuis, et un langage que j'utilise tous les jours... J'en ai oublié pas mal, donc je me remets à niveau tant que j'ai des restes.

Pour ce qui est des classes, je sais bien qu'il faut les séparer (je le fais même en php 5 ^^, mais pour le moment, je voulais tout mettre dans un fichier afin de faire les premiers tests sur les classes. Je séparrerais le tout dès que mon code sera un peu plus long...

Dans tous les cas, mon problème reste entier ^^ Comment utiliser la méthode de la classe "awale", dans une autre méthode de la classe "joueur"? Je pourrais biensûr mettre en attribut de la classe "joueur" un objet awale, mais bon, sachant que cet objet est déjà créé dans mon main, ça ne me semble pas super :S . Il faudrait mettre les attributs de la classe awale en statique, afin que les changements faits dans la méthode de "joueur" soient visible dans mon main ^^

Bref comment faites vous, quand ce genre de cas se présente?

PS : merci de ta réponse malgré tout ^^ C'est sympa de bien vouloir m'aider

Dernière modification par Helldream (Le 26/07/2007, à 22:12)

Hors ligne

#5 Le 26/07/2007, à 22:19

Nanawel

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

AuraHxC a écrit :

Je vois pas le rapport avec le java => parce que perso que ca soit en java ou C++ je fais exactement ce que tu dis un fichier par classe...

PHP et Java ne séparent pas la déclaration et l'implémentation, au contraire de C++...

Et c'est pas la peine de répondre comme ça mad

@Helldream
Je ne suis pas sûr de comprendre ton problème, pourrais-tu le développer un peu stp ?

Dernière modification par Nanawel (Le 26/07/2007, à 22:26)

Hors ligne

#6 Le 26/07/2007, à 22:52

Helldream

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Je vais essayer, mais pas certain de réussire ^^

Si tu regardes mon code (posté au premier post), tu verras que dans ma classe "joueur", mes méthodes font appel à d'autres méthodes, qui elles font partie de la classe "awale".

Dans l'état actuel des choses, si tu essaies de compiler mon code tel quel, tu auras des erreurs du genre : "awale.cpp:77: erreur: "ajouter_graine" was not declared in this scope". En effet, ajouter_graine n'est pas déclaré dans la classe "joueur", mais dans "awale". Donc forcément, il rale.

J'aimerais donc savoir comment faire pour pouvoir utiliser des méthodes d'une classe dans une autre. Faut-il créer un objet de type "awale" dans ma classe "joueur"? Mais dans ce cas, comment faire pour que mon objet "jeu" créé dans mon main prenne en compte les modifications de mon tableau?

Pas facile à expliquer :S

Hors ligne

#7 Le 27/07/2007, à 00:01

taxus

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Je suis moi-même en apprentissage du C++. Je crois que quand tu définis une fonction, tu devrais spécifier quelle fonction tu définis. Le nom seul n'est pas suffisant, tu dois spécifier à quelle classe elle appartient. Regarde l'exemple donné par Nanawel. Et le site qu'il mentionne contient de très bons tutoriaux.

Hors ligne

#8 Le 27/07/2007, à 00:08

Helldream

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Merci de ta réponse, mais hélas je ne pense pas que ce soit possible d'appeler une fonction comme cela. J'ai essayé tout de même, et j'ai l'erreur : cannot call member function "int awale::nb_graines(int)" without object :S

Hors ligne

#9 Le 27/07/2007, à 04:58

xyor

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Il y a plusieurs possibilités. Il faut se poser les bonnes questions.
Que fait ton joueur ? Il joue à awale, donc il faut qu'"il ait la connaissance de l'objet awale.
Dans la méthode joueur::jouer() tu lui demandes une méthode de l'objet awale: prendre_graines(n) , mais il ne connais pas l'objet awale (qui est uniquement déclaré dans ton main).

Une solution:
Ajouter une référence à la méthode joueur::jouer(const awale& a, int n).

bool joueur::jouer(const awale& a, int n) {
  // bla bla bla
  a.prendre_graines(n);
  // ...
}

Et dans ton main tu feras un joueur1.jouer(jeu, n);

Une autre solution consiste à mettre la référence de awale dans le constructeur de l'objet joueur (joueur(const awale& a) {...});

Hors ligne

#10 Le 27/07/2007, à 07:42

Nanawel

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

xyor a écrit :

Ajouter une référence à la méthode joueur::jouer(const awale& a, int n).

bool joueur::jouer(const awale& a, int n) {
  // bla bla bla
  a.prendre_graines(n);
  // ...
}

Et dans ton main tu feras un joueur1.jouer(jeu, n);

Une autre solution consiste à mettre la référence de awale dans le constructeur de l'objet joueur (joueur(const awale& a) {...});

+1
Je viens de comprendre le noeud du problème, effectivement je ne l'avais pas envisagé comme ça smile

Helldream, tes méthodes s'appliquent forcément sur un objet, autrement dit, le joueur doit avoir connaissance du jeu auquel il joue puisqu'il agit directement dessus. Il faut donc lui donner les objets dont il doit avoir connaissance si tu veux pouvoir agir dessus.

Hors ligne

#11 Le 27/07/2007, à 08:50

littleblackdog

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Nanawel a écrit :

Helldream, tes méthodes s'appliquent forcément sur un objet, autrement dit, le joueur doit avoir connaissance du jeu auquel il joue puisqu'il agit directement dessus. Il faut donc lui donner les objets dont il doit avoir connaissance si tu veux pouvoir agir dessus.

et cela, ça se fait soit en passant l'objet en argument de la fonction où tu désire l'utiliser, comme il été dit, soit en déclarant un champ de type awale propre à l'objet joueur, et auquel tu pourras accéder sans soucis. cependant, dans ce second cas, chaque joueur aura sa propre instance d'awale, qui ne partagera pas les champs avec les autres, ce qui peut être problématique suivant le but de ton programme.

si tu veux que tous les joueurs aient connaissance du même awale, le passage en argument de fonction est mieux. sinon, tu peux mettre un objet de cette classe en variable globale, je pense. et je crois qu'il y a aussi un mot clef à ajouter devant un champ pour qu'il soit partagé par toutes les instances de classe qui le contiennent, comme en java... non ? à voir dans un tuto quelconque la solution qui te convient le mieux.

Dernière modification par littleblackdog (Le 27/07/2007, à 08:53)

Hors ligne

#12 Le 27/07/2007, à 08:55

Nanawel

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Dans le cas (improbable je pense) où un joueur peut jouer à plusieurs jeu simultanément, il est préférable de lui passer l'instance du jeu concerné au moment où on appelle la méthode.

Dans l'autre cas, où un joueur joue à un seul jeu, il pourrait être envisageable d'ajouter un attribut privé "jeu" de type "awale" qui serait initialisé au constructeur. Afin que tous les joueurs jouent au MEME jeu, ça devrait même être un pointeur sur un objet awale.

Hors ligne

#13 Le 27/07/2007, à 09:56

AuraHxC

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Nanawel a écrit :

Et c'est pas la peine de répondre comme ça mad

Désolé, c'est la fatigue tongue

Effectivement y a une différence mais je pensais que tu parlais pour le fait qu'il fallait faire une classe par fichier et comme je connais des gens qui font du java dans un seul fichier yikes
En C++, le .h effectivement sert a mettre ta classe avec le prototype des methodes, un peu comme en C ou tu mets tes prototypes de fonction.

Encore désolé, je voulais pas te froisser wink

Hors ligne

#14 Le 28/07/2007, à 01:48

Helldream

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Merci de vos réponse, j'y vois déjà un peu plus clair. Oui j'aimerais en effet mettre la référence de awale dans mon constructeur. Mais comment faire? Suis-je obligé d'utiliser un pointeur (j'ai un peu de mal avec, donc quand je peux, je les esquive ^^) ? Serais-ce abuser de demander un exemple (si oui, je chercherais, le principal est que j'ai une piste à suivre) ? smile

Hors ligne

#15 Le 28/07/2007, à 01:52

taxus

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

@Helldream: non, j'ai parlé de la syntaxe de la définition de la fonction dans la classe, pas de l'appel de la fonction à partir de l'autre classe. Ça ne semble pas avoir d'incidence.

Donc c'est pas requis de spécifier l'appartenance d'une fonction qu'on définit dans une classe? Si je comprends bien,

        int MaClasse::maMethode(int argument) {
        // blablabla
        }

ou

        int maMethode(int argument) {
        // blablabla
        }

dans MaClasse, ça marche?  Mais je suppose que c'est plus rigoureux de la première manière.

Hors ligne

#16 Le 28/07/2007, à 02:12

Helldream

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

@Taxus : Quand tu déclares ta fonction DANS ta classe, tu n'as pas à mettre maclasse:: (logique, tu es déjà dans ta classe). Par contre, si tu déclares ta fonction à l'extérieur de ta classe (dans un fichier .cpp par exemple), là c'est obligatoire.

PS : ne vous embêtez pas pour l'exemple à propos du pointeur, mes restes de souvenirs m'ont suffit à mettre ça en place. Voici le code que ça donne (il fonctionne bien maintenant wink ) :

#include <iostream>

using namespace std;

class awale
{
	private:
		int	i;
		int	jeu[12];

	public:
		awale()
		{
			for(i=0;i<12;i++)
			{
				jeu[i]=4;
			}
		}
		
		void	afficher()
		{
			for (i=0;i<6;i++)
			{
				cout << jeu[i] << '	';
			}
			cout << endl;
			for (i=6;i<12;i++)
			{
				cout << jeu[i] << '	';
			}
			cout << endl;
		}
		
		int	nb_graines(int n)
		{
			return jeu[n];
		}
		
		float	prendre_graines(int n)
		{
			jeu[n]=0;
		}
		
		float	ajouter_graine(int n)
		{
			jeu[n]++;
		}
};

class joueur
{

	private:
		int	score;
		awale	*mon_awale;
		
	public:
		joueur(awale& a)
		{
			score=0;
			mon_awale=&a;
		}
		
		bool	jouer(int n)
		{
			if (mon_awale->nb_graines(n)!=0)
			{
				int m=n;
				int nb=mon_awale->nb_graines(n);
				mon_awale->prendre_graines(n);
				for (int i=1;i<=nb;i++)
				{
					m++;
					if (m==12)
					{
						m=0;
					}
					mon_awale->ajouter_graine(m);
				}
				while ((mon_awale->nb_graines(m)==2 || mon_awale->nb_graines(m)==3) && m>=0 && m<6)
				{
					score+=mon_awale->nb_graines(m);
					mon_awale->prendre_graines(m);
					m--;
				}
			}
			else
			{
				return false;
			}
			
		}
};

int main()
{
	awale jeu;
	joueur joueur1(jeu);
	
	int n;
	
	do
	{
		jeu.afficher();
		cin >> n;
		n+=5;
		joueur1.jouer(n);
	}
	while (n>=6 && n<12);
	return 0;
}

PS : merci beaucoup pour votre aide et votre patience!

Dernière modification par Helldream (Le 28/07/2007, à 02:13)

Hors ligne

#17 Le 28/07/2007, à 02:31

taxus

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

[Oups, ma syntaxe des pointeurs était incorrecte. Texte modifié en conséquence.]

Je pense que les pointeurs sont dangereux et devraient être évités lorsque possible. La syntaxe de l'utilisation des pointeurs me donne des mots de tête.

Le C++ introduit le concept d'arguments passés en référence, par rapport aux pointeurs que C permettait. J'ai lu ça hier (excellent livre en passant, évidemment quand on comprend l'anglais), mais c'est pareil en C# et en VB.NET. Et xyor t'a justement donné un exemple (const awale a&), mais en faisant de l'argument une constante (const).

Bruce Eckel écrit dans son livre qu'il est préférable d'utiliser les variables passées en référence plutôt que des pointeurs, et je suis d'accord car la syntaxe est plus simple à l'utilisation.

Je lu ça dans les derniers jours, alors les experts, corrigez-moi si je me trompe. Helldream, dans ta fonction jouer (j'ai mis la déclaration ici):

bool    jouer(int n);

n est passée comme valeur. Concrètement, ça veut dire que la variable est recopiée dans ta fonction, et si tu modifiais n dans ta fonction jouer, tu ne modifies pas l'original.

Si tu passes un objet awale de la même façon:

bool    jouer(int n, awale unJeu);

la variable unJeu est recopiée de l'original, et si tu modifies unJeu, tu ne modifies pas l'original. Si tu veux modifier l'original, ou si tu n'as pas besoin d'en faire une copie, en C tu peux utiliser un pointeur:

bool    jouer(int n, awale* unPointeurDeAwale);

unPointeurDeJeu est ici, comme son nom l'indique, un pointeur vers une variable de type awale. Pour accéder aux membres de l'objet référencé par le pointeur, il faut les «déréférencer» avec l'opérateur ->:

int nombreGrainesPourX = unPointeurDeAwale->nb_graines(5);

Ouf.

Remarquons le ->: s'il ne s'agissait pas d'un pointeur mais d'une variable de type awale, la syntaxe pour accéder à la fonction nb_graines de awale serait:

variableAwale.nb_graine(5);

C'est bien plus simple avec les arguments passés en référence.

Une variable passée comme argument en référence n'est pas copiée dans la fonction. C'est son adresse qui est passée. On l'indique à la fonction comme xyor l'a montré:

bool    jouer(int n, awale& jeuAwale);

En C, l'opérateur unaire & voulait déjà dire «adresse en mémoire de la variable» (ex. « &maVariable »). Le C++ ajoute la possibilité de l'utiliser dans l'argument d'une fonction. Ainsi, dans la fonction, on peut utiliser la variable passée en référence comme une variable passée par valeur:

int nombreGrainesPourX = jeuAwale.nb_graines(5);

Bien plus simple, car on n'a pas à utiliser deux syntaxes différentes.

Dernière modification par taxus (Le 28/07/2007, à 02:50)

Hors ligne

#18 Le 28/07/2007, à 02:32

taxus

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Ah! Trop tard, j'ai tapé pendant que tu rédigeais ta réponse. smile

Hors ligne

#19 Le 28/07/2007, à 02:36

taxus

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

D'ac, pigé! smile

Je parierais que dans ta classe joueur, tu pourrais éviter le pointeur:

class joueur
{

    private:
        int    score;
        awale    mon_awale;
        
    public:
        joueur(awale& a)
        {
            score=0;
            mon_awale=a;
        }
        
        bool    jouer(int n)
        {
            if (mon_awale.nb_graines(n)!=0)
            {
                int m=n;
                int nb=mon_awale.nb_graines(n);
                mon_awale.prendre_graines(n);
                for (int i=1;i<=nb;i++)
                {
                    m++;
                    if (m==12)
                    {
                        m=0;
                    }
                    mon_awale.ajouter_graine(m);
                }
                while ((mon_awale.nb_graines(m)==2 || mon_awale.nb_graines(m)==3) && m>=0 && m<6)
                {
                    score+=mon_awale.nb_graines(m);
                    mon_awale.prendre_graines(m);
                    m--;
                }
            }
            else
            {
                return false;
            }
            
        }
};

Est-ce exact?

Hors ligne

#20 Le 28/07/2007, à 02:53

taxus

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Bon exercice que d'avoir tenté d'expliquer, ça me fait assimiler la matière lue. Ça doit faire 3-4 éditions du message que je fais, j'arrête pas de trouver des erreurs!

Hors ligne

#21 Le 28/07/2007, à 10:37

Helldream

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Je vais tester ta méthode sans pointeur ce soir (j'aimerais bien moi aussi les éviter, pas qu'ils soient dangereux, mais que j'ai toujours un peu de mal à les utiliser, et qu'une erreur dans ces variables ne pardonnent pas ^^). Je te tiens au courant dès que c'est fait wink

Hors ligne

#22 Le 28/07/2007, à 10:49

AuraHxC

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Tu as raison les pointeurs c'est pas dangeureux quand on sait les utiliser mais c'est vrai que les langage ou tu les gère pas tu as moins de tracas wink

Hors ligne

#23 Le 28/07/2007, à 13:51

Helldream

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

J'ai fait le test sans pointeur, et ça ne marche pas ^^

En y réfléchissant, c'est assez logique : tu passes dans le constructeur l'argument par référence. Ca ok. Mais quand tu fais mon_awale=a, tu recopies dans la VALEUR  de "a", dans "mon_awale", (c'est "a" qui est passé en référence, pas "mon awale"). Donc lorsque tu modifies ensuite mon_awale, les modifications de ton objet ne sont pas répercutées dans ton main. Je pense donc qu'il est obligatoire d'utiliser un pointeur, à moins de passer comme argument de chaque fonction l'objet awale, mais là c'est pas pratique.

En tous cas merci à tous de votre aide, elle m'a été vraiment utile à comprendre comment m'y prendre!

Hors ligne

#24 Le 28/07/2007, à 15:22

taxus

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Ah bon? «mon_awale=a» copie la valeur?

En VB.NET (et en C#, des langages qui utilisent les références mais pas les pointeurs, donc moins de tracas wink ), l'instruction «mon_awale=a» copierait la référence, pas la valeur, mais c'est manifestement pas le cas en C++. Bon, je vais prendre un peu d'avance et aller au chapitre 11 du livre d'Eckel, «Références et le constructeur-copieur» («Copy-Constructor»).

Bruce Eckel a écrit :

Une référence (&) est comme un pointeur de type constante qui est automatiquement «déréférencé». Elle est généralement utilisée pour les listes d'arguments de fonctions et les valeurs de retour de fonctions. Mais vous pouvez également faire une référence indépendante (ou autonome? free-standing dans le texte).

Et l'exemple montre:

// Ordinary free-standing reference:
int y;
int& r = y;

Donc si mon_awale doit être une référence, il faudrait plutôt écrire awale& mon_awale; dans la déclaration de la variable locale:

class joueur
{

    private:
        int    score;
        awale&    mon_awale;
        
    public:
        joueur(awale& a)
        {
            score=0;
            mon_awale=a;
        }
        
        bool    jouer(int n)
        {
            if (mon_awale.nb_graines(n)!=0)
            {
                int m=n;
                int nb=mon_awale.nb_graines(n);
                mon_awale.prendre_graines(n);
                for (int i=1;i<=nb;i++)
                {
                    m++;
                    if (m==12)
                    {
                        m=0;
                    }
                    mon_awale.ajouter_graine(m);
                }
                while ((mon_awale.nb_graines(m)==2 || mon_awale.nb_graines(m)==3) && m>=0 && m<6)
                {
                    score+=mon_awale.nb_graines(m);
                    mon_awale.prendre_graines(m);
                    m--;
                }
            }
            else
            {
                return false;
            }
            
        }
};

pour indiquer que la variable mon_awale locale à la classe est également une référence. Ah, c'est logique.

Dernière modification par taxus (Le 28/07/2007, à 15:25)

Hors ligne

#25 Le 28/07/2007, à 21:25

Helldream

Re : [Résolu][C++] Les classes et leur utilisation... (faux débutant)

Je n'ai pas encore testé, mais là en effet, ça me semble tout à fait cohérent (et même logique). Je ne maitrise pas encore les références, mais c'est vrai que ça semble utile : à part dans les paramètres, je ne savais pas qu'on pouvait déclarer une variable en référence! Pour moi ce n'était qu'une notation pour dire "passe l'adresse de la variable, et pas son contenu", rien de plus...

Comme quoi on en apprend tout les jours ^^. Je ne maitrise pas l'anglais (j'ai un bon niveau scolaire, mais c'est tout. Et ayant fait des études scientifiques puis d'informatique, les cours en la matière n'étaient pas super poussés), mais il faudra que j'aille jeter un oeuil à ta doc wink

Maintenant que le sujet est correctement traité, mon prochain problème concernera l'IA du jeu ^^. Je pense utiliser un genre de liste chainée (enfin il y a des trucs tout faits en C++, un peu comme le String pour les chaines de caractères, donc je vais me pencher dessus ^^ ) regroupant tous les coups que l'ordinateur pourra jouer, les répliques que pourra avoir le joueur, etc etc (à plusieurs profondeurs selon la difficulté), mais bon, je pense que je parlerais de tout ça dans un autre post. Mes premières questions seront : y a-t'il une limite sur la quantité qu'on peux stocker dans une liste... Par exemple stocker 2 millions de structures (c'est un exemple extrème, mais qui pourrait arriver en tirant un peu la corde ^^).

Bref, je referais un autre post dans la soirée (ou demain), car ce n'est plus le problème initial!

Merci de votre aide et à bientôt!

[Edit] Il semblerait finalement que ça ne marche pas : lorsqu'on déclare une variable en référence, il faut visiblement lui donner immédiatement ce qu'il doit référencer. Ainsi, impossible de déclarer une variable de référence dans un objet, et l'initialiser dans le constructeur...

Dernière modification par Helldream (Le 29/07/2007, à 21:31)

Hors ligne