Heritage en c++ : gerer les constructeurs.
Fermé
chmanu
Messages postés
166
Date d'inscription
mardi 15 mai 2001
Statut
Membre
Dernière intervention
3 septembre 2012
-
25 janv. 2002 à 15:38
caro87 Messages postés 2 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 15 décembre 2007 - 14 déc. 2007 à 18:24
caro87 Messages postés 2 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 15 décembre 2007 - 14 déc. 2007 à 18:24
13 réponses
floverdevel
Messages postés
121
Date d'inscription
dimanche 18 février 2001
Statut
Membre
Dernière intervention
20 mai 2011
15
26 janv. 2002 à 03:15
26 janv. 2002 à 03:15
Tu ne devrais pas ecrire :
cout<<"Nom case ?\n";
cin >> nom;
cout << "Propriete ou Bonus (p / b)\n";
char c;
cin >> c;
dans ton constructeur mais bien dans ton code principal,et selon
la réponse tu pourra instancier soit un Propriete ou un Bonus
Le fais d'instancier Propriete ou Bonus va appeler le constructeur
de celui-ci et ainsi appeler le constructeur de son/ses parent(s)...
Ellis
No 'one' can be told what the matrix is.
You'll have to explore it yourself.
cout<<"Nom case ?\n";
cin >> nom;
cout << "Propriete ou Bonus (p / b)\n";
char c;
cin >> c;
dans ton constructeur mais bien dans ton code principal,et selon
la réponse tu pourra instancier soit un Propriete ou un Bonus
Le fais d'instancier Propriete ou Bonus va appeler le constructeur
de celui-ci et ainsi appeler le constructeur de son/ses parent(s)...
Ellis
No 'one' can be told what the matrix is.
You'll have to explore it yourself.
zebiloute
Messages postés
105
Date d'inscription
mardi 15 janvier 2002
Statut
Membre
Dernière intervention
14 avril 2005
4
25 janv. 2002 à 15:44
25 janv. 2002 à 15:44
essais un truc du style
Propriete::Propriete();
Bonus::Bonus();
tel quel pour appeler une fonction de la clase héritée !!!
Quand ça veut Po ça veut po !!!
- Et ben y a plus qu'à attendre -
Propriete::Propriete();
Bonus::Bonus();
tel quel pour appeler une fonction de la clase héritée !!!
Quand ça veut Po ça veut po !!!
- Et ben y a plus qu'à attendre -
Quand une classe herite d'une autre classe elle ne garde pas ses propriétés identiques, tu peux rajouté par exemple un attribut...donc dans ce cas modifier le construcreur. L'heritage permet surtout de garder la parti non visible, mais tu peu remodifier les methodes comme tu le souhaite
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
25 janv. 2002 à 17:48
25 janv. 2002 à 17:48
Tu sais les constructeurs et destructeurs ne st pas des methodes coe les autres,ils st juste appeles a la construction et destruction d'1 objet, et donc je ne vois pas l'interet d'en appeler un a la main puisq le langage s'en charge et je ne sais meme pas si on peut.On appelle le constructeur et destructeur a la main q ds le cas de ceux de constructeur et destructeur d'1 fils(on appelle les constructeurs des classes meres).
tafiscobar
tafiscobar
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ok merci a tout le beau monde qui m a repondu, j ai tout bien compris, mais voila alors; comment faire ca:
un 'Plateau' est fait de 40 'Case' mais on sait pas, au debut du prog comment elles seront reparties, en fait ces 'Case' ne sont que virtuelles car ce sera obligatoirement ou bien une 'Propriete', ou bien un 'Bonus'.
comment faire alors pour declarer mon plateau comme je le veux ds mon prog ?
en gardant :
Case Plateau [40];
car il faut pouvoir parcourir le 'Plateau'.
un 'Plateau' est fait de 40 'Case' mais on sait pas, au debut du prog comment elles seront reparties, en fait ces 'Case' ne sont que virtuelles car ce sera obligatoirement ou bien une 'Propriete', ou bien un 'Bonus'.
comment faire alors pour declarer mon plateau comme je le veux ds mon prog ?
en gardant :
Case Plateau [40];
car il faut pouvoir parcourir le 'Plateau'.
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
27 janv. 2002 à 19:59
27 janv. 2002 à 19:59
tu sais quand t'as une classe mere, toute instance de cette classe peut recevoir une instance d'une de ces classes derivées.Donc, tu declares au debut ton tableau de 40 cases et apres suivant la reponse de l'utilisateur, tu initialiseras propriete ou bonus, et don ccoe c'est a l'execution qu'on qoi initialiser, alors je te conseille d'utiliser un tableau de pointeurs sur ta classe de base.Ds tous chacune des cases de ton tableau pourra contenir indiferemment une instance propriete ou bonus.
Je pense q j'ai un p repondu a ta question, donnes moi des news
tafiscobar
Je pense q j'ai un p repondu a ta question, donnes moi des news
tafiscobar
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
27 janv. 2002 à 20:19
27 janv. 2002 à 20:19
je ne sais pas quel genre d'exemple tu veux mais attends. Par ex:
typedef case *pcase; // un type pointeur sur case
pcase ptab[40]; //un tableau de pointeurs sur case
/*tu p faire */ ptab[0]=new propriete; ptab[1]=new bonus;
ptab[2]=new case;
Voila un exemple tantot ptab contient un bonus tantot elle contient une propriete tantot meme une case et donc tu peux faire :
propriete *maPropriete;
bonus *monBonus;
//apres avoir initialise tes pointeurs, tu p faire
ptab[0]=maPropriete;//ptab contennant des pointeurs
ptab[1]=monBonus; //ou (*patab[1])=(*monBonus); de mem qu'avec propriete.
Si je ne t'aide pas, on avait fait un petit ex avec des comptes, si je le retrouve, je te l'envoie.
tafiscobar
typedef case *pcase; // un type pointeur sur case
pcase ptab[40]; //un tableau de pointeurs sur case
/*tu p faire */ ptab[0]=new propriete; ptab[1]=new bonus;
ptab[2]=new case;
Voila un exemple tantot ptab contient un bonus tantot elle contient une propriete tantot meme une case et donc tu peux faire :
propriete *maPropriete;
bonus *monBonus;
//apres avoir initialise tes pointeurs, tu p faire
ptab[0]=maPropriete;//ptab contennant des pointeurs
ptab[1]=monBonus; //ou (*patab[1])=(*monBonus); de mem qu'avec propriete.
Si je ne t'aide pas, on avait fait un petit ex avec des comptes, si je le retrouve, je te l'envoie.
tafiscobar
ouais ok, merci bcp : ca avance.
c est ce que j avais commencé a faire (sans pointeurs)
Mais maintenant mon probleme est a l appel de fct :
acheter(Propriete *);
qd je fais :
acheter(ptab[0]);
ca ne marche pas et en plus le compilateur ne veut pas que je declare : acheter(Case *);
Encore merci mais, oui si tu peut m'envoyer ton ptit prog ce serai sympa.
c est ce que j avais commencé a faire (sans pointeurs)
Mais maintenant mon probleme est a l appel de fct :
acheter(Propriete *);
qd je fais :
acheter(ptab[0]);
ca ne marche pas et en plus le compilateur ne veut pas que je declare : acheter(Case *);
Encore merci mais, oui si tu peut m'envoyer ton ptit prog ce serai sympa.
floverdevel
Messages postés
121
Date d'inscription
dimanche 18 février 2001
Statut
Membre
Dernière intervention
20 mai 2011
15
28 janv. 2002 à 17:37
28 janv. 2002 à 17:37
Comme il ya de l'héritage dans ton code, tu devras déclarer
la fonction acheter comme étant virtuelle ('virtual' en anglais)
dans ta classe Case et la déclarer normalement dans les classes Propriete et Bonus
ex.:
//Classe mère
class TCase
{
protected:
virtual void acheter(void);
public:
TCase(); //Constructeur
~TCase(); //Destructeur
};
//La classe TPropritete herite de TCase
class TPropriete : public TCase
{
public:
void acheter(void);
TPropriete(); //Constructeur
~TPropriete(); //Destructeur
};
//La classe TBonus herite de TCase
class TBonus : public TCase
{
public:
void acheter(void);
TBonus(); //Constructeur
~TBonus(); //Destructeur
};
TCase *ptBoard[40]; //Tableau de 40 pointeur sur TCase;
//...
//Je sais pas comment tu test la réponse de l'utilisateur
//mais selon sa réponse tu crée le bon type de case
for(int i = 0;i<40;i++)
{
//demande la question a l'utilisateur...
switch(cReponse)
{
case 'p':
case 'P':
{
ptBoard[i] = new TPropriete();
break;
}
case 'b':
case 'B':
{
ptBoard[i] = new TBonus();
break;
}
}
}
//...
//Pour appeler la bonne fonction, c'est le compilateur qui le fait
//tout ce que t'as a faire c'est :
ex.:
ptBoard[i]->acheter();
//Le compilateur c'est de quel type a été instancier ptBoard[i],
//donc il s'ait quelle fonction il doit appeler
//c'est ça l'avantage de l'héritage et du polymorphisme
//J'esrpere que ça peut t'aider
//Sinon dis moi le, je vais trouver un de mes exemples que
//j'ai fais au cégep qui ressemble à ton probleme
floverdevel
No 'one' can be told what the matrix is.
You'll have to explore it yourself.
la fonction acheter comme étant virtuelle ('virtual' en anglais)
dans ta classe Case et la déclarer normalement dans les classes Propriete et Bonus
ex.:
//Classe mère
class TCase
{
protected:
virtual void acheter(void);
public:
TCase(); //Constructeur
~TCase(); //Destructeur
};
//La classe TPropritete herite de TCase
class TPropriete : public TCase
{
public:
void acheter(void);
TPropriete(); //Constructeur
~TPropriete(); //Destructeur
};
//La classe TBonus herite de TCase
class TBonus : public TCase
{
public:
void acheter(void);
TBonus(); //Constructeur
~TBonus(); //Destructeur
};
TCase *ptBoard[40]; //Tableau de 40 pointeur sur TCase;
//...
//Je sais pas comment tu test la réponse de l'utilisateur
//mais selon sa réponse tu crée le bon type de case
for(int i = 0;i<40;i++)
{
//demande la question a l'utilisateur...
switch(cReponse)
{
case 'p':
case 'P':
{
ptBoard[i] = new TPropriete();
break;
}
case 'b':
case 'B':
{
ptBoard[i] = new TBonus();
break;
}
}
}
//...
//Pour appeler la bonne fonction, c'est le compilateur qui le fait
//tout ce que t'as a faire c'est :
ex.:
ptBoard[i]->acheter();
//Le compilateur c'est de quel type a été instancier ptBoard[i],
//donc il s'ait quelle fonction il doit appeler
//c'est ça l'avantage de l'héritage et du polymorphisme
//J'esrpere que ça peut t'aider
//Sinon dis moi le, je vais trouver un de mes exemples que
//j'ai fais au cégep qui ressemble à ton probleme
floverdevel
No 'one' can be told what the matrix is.
You'll have to explore it yourself.
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
28 janv. 2002 à 20:04
28 janv. 2002 à 20:04
d'abord je dois dire q floverdevel t'as repondu et que je pense q ce qu'il a dit te suffira car il t'a montre comment declarer ta fonction acheter(par consequent cette fct n'attend plus de parametres car elle est integree a la classe utilisatrice).De 2 , pour le bleme d'appel, qd une fct a pour parametre un pointeur, elle reçoit egalement a l'appel un pointeur ie q tu devais ecrire
acheter(&ptab[0]) au lieu de acheter(ptab[0]);
Bonne chance sinon tiens ns au courant.
Au fait floverdevel, t'as lu mon message erreur sous VC++, est ec q tu ne pourrais pas m'aider?? le message est sur les archives (pas tres loin vers la semaine derniere).
tafiscobar
acheter(&ptab[0]) au lieu de acheter(ptab[0]);
Bonne chance sinon tiens ns au courant.
Au fait floverdevel, t'as lu mon message erreur sous VC++, est ec q tu ne pourrais pas m'aider?? le message est sur les archives (pas tres loin vers la semaine derniere).
tafiscobar
caro87
Messages postés
2
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
15 décembre 2007
14 déc. 2007 à 18:24
14 déc. 2007 à 18:24
salut,
j'ai un prob pour faire le constructeur en C++dans un héritage multiple...
J'ai 1 classe T qui hérite de 2 autres classes V et L et je veux faire le constructeur vide de T qui se construit a l'aide du constructeur vide de L...De plus mes 3 classes sont des template...
comment faire?
merci d'avance
j'ai un prob pour faire le constructeur en C++dans un héritage multiple...
J'ai 1 classe T qui hérite de 2 autres classes V et L et je veux faire le constructeur vide de T qui se construit a l'aide du constructeur vide de L...De plus mes 3 classes sont des template...
comment faire?
merci d'avance