Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

Heritage en c++ : gerer les constructeurs.

chmanu, le vendredi 25 janvier 2002 à 15:38:12 
 Signaler ce message aux modérateurs

Salut a tous
voila je prog un monopoly en c++ et j ai (parmis d autres) deux classes qui heritent d une troisieme :
Bonus et Propriete qui heritent de Case
voila j aimerai, lorsque j appelle le constructeurs de Case, je regarde si c une Propriete ou un Bonus (entree de lutilisateur pour le moment)
et que selon la reponse, un Bonus ou une Propriete soit construite(donc que this ne soit pas une Case mais une Propriete).

Sauf que qd on appelle le constructeur de Propriete par ex, vu que ca herite de Case, ca appelle le constructeur de Case.

Comment faire ? (virtual?, ou?) (rem : j aimerai garder l'heritage)


voila ce que j ai deja fait mais c,comme vous le comprendrez, completement bete.

Case::Case()
{
cout<<"Nom case ?\n";
cin >> nom;
cout << "Propriete ou Bonus (p / b)\n";
char c;
cin >> c;
if (c=='p')
{
Propriete();
}
if (c=='b')
{
Bonus();
}
}

1

zebiloute, le vendredi 25 janvier 2002 à 15:44:45

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 -

Répondre à zebiloute

2

Colt Siver, le vendredi 25 janvier 2002 à 16:07:02

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

Répondre à Colt Siver

3

tafiscobar, le vendredi 25 janvier 2002 à 17:48:24

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

Répondre à tafiscobar

4

floverdevel, le samedi 26 janvier 2002 à 03:15:39

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.

Répondre à floverdevel

5

merzougui, le dimanche 27 janvier 2002 à 17:23:14

Des document sur la programmation c++ en ansi.
merci

Répondre à merzougui

6

chmanu, le dimanche 27 janvier 2002 à 19:12:46

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'.

Répondre à chmanu

7

tafiscobar, le dimanche 27 janvier 2002 à 19:59:24

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

Répondre à tafiscobar

8

chmanu, le dimanche 27 janvier 2002 à 20:05:59

Tu veux pas me filer un ex ?

Merci d avance

Répondre à chmanu

9

tafiscobar, le dimanche 27 janvier 2002 à 20:19:02

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

Répondre à tafiscobar

10

chmanu, le dimanche 27 janvier 2002 à 21:03:37

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.

Répondre à chmanu

11

floverdevel, le lundi 28 janvier 2002 à 17:37:56

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.

Répondre à floverdevel

12

tafiscobar, le lundi 28 janvier 2002 à 20:04:55

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

Répondre à tafiscobar

13

lomatadri, le jeudi 8 novembre 2007 à 20:48:39

Bonjour,
merci, merci a tous
Des petits exemples peuvent eclairer bien des choses .....

Répondre à lomatadri

14

 caro87, le vendredi 14 décembre 2007 à 18:24:59

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

Répondre à caro87
[C#]Heritage, virtual, override,... Salut tout le monde... Y'a un truc que je ne capte pas sur C# J'ai une forme A et une forme B, B heritant de A. Dans ma forme A j'ai une fonction f : protected virtual void f() et dans ma B une : protected override void f() Quand je charge ma forme B,... www.commentcamarche.net/forum/affich-816715-c-heritage-virtual-override
Constructeur par recopie et heritage C++ Bonjour, J'essaie de créer un tournoi de foot en c++. J'ai une classe joueur, une classe coach, et une classe coach-joueur qui herite de ces 2 classes (heritage multiple). Je dois pour le sujet implementer un constructeur par recopie. Dans la classe... www.commentcamarche.net/forum/affich-3918431-constructeur-par-recopie-et-heritage-c
[C++] difficultés de programmation & héritage (Résolu) Bonjour, je nage en plein desespoir, je dois rédiger un programme d'info en C++ et j'ai beaucoup de lacunes ! C'est pourquoi ma question n'est pas très bien ciblée d'ailleurs... Alors, pour commencer, on me demande de créer un fichier avec une classe... www.commentcamarche.net/forum/affich-2557095-c-difficultes-de-programmation-heritage
Gérer les partitions sous WindowsPour ceux qui veulent gérer leurs partitions sous Windows XP, Vista ou Seven sans télécharger aucun logiciel supplémentaire, voici la procédure : Accédez au gestionnaire de disque Partitionner son disque Réduire une partition Créer une... www.commentcamarche.net/faq/sujet-17585-gerer-les-partitions-sous-windows
Les piles en langage CLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage... www.commentcamarche.net/faq/sujet-8283-les-piles-en-langage-c
Les files en langage CLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un... www.commentcamarche.net/faq/sujet-8282-les-files-en-langage-c
Langage c: déplacement dans un répertoire (Résolu)Bonjour à tous, J'essaye de faire une barre de progression en langage C (un peu comme dans le poste de travail quand on copie des fichiers). Mais j'ai un petit soucis: comment faire pour connaitre la taille d'un répertoire (je suppose que la copie ou... www.commentcamarche.net/forum/affich-1702007-langage-c-deplacement-dans-un-repertoire
Langage C : gérer nombre de Fork (Résolu)Bonjour, je bosse sur un programme qui doit envoyer des mails. Je doit pour cela créer plusieurs processus fils mais dans un nombre limité (et c'est bien ça mon problème...). Comment puis-je m'y prendre? D'avance merci www.commentcamarche.net/forum/affich-2307953-langage-c-gerer-nombre-de-fork
Boucle for en C++Bonjour, j' ai besoin pour un programme de faire deux boucles incluses l' une dans l' autre en c++ J' utilise pour cela devC++ qui me signale des erreurs pour ceçi; for (i=0; i www.commentcamarche.net/forum/affich-4569782-boucle-for-en-c
Télécharger Visual C++ 2008 ExpressVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C. www.commentcamarche.net/telecharger/telecharger-34056350-visual-c-2008-express
Télécharger Dev-C++Dev-C++ est un environnement de développement intégré (IDE) en C/C++. Son compilateur est basé sur Mingw de GCC, mais il peut également être utilisé avec CygWin. www.commentcamarche.net/telecharger/telecharger-59-dev-c
Télécharger Labo de formation C# .NetLabo de formation C# .Net est un laboratoire virtuel d'auto-formation à la plateforme .Net avec C# et VB.Net, il représente environ 200h de formation, sous forme d'ateliers comprenant des cours au format pdf, des TD, des TP (plus de 200 exemples,... www.commentcamarche.net/telecharger/telecharger-34058333-labo-de-formation-c-net
Dream multimedia Dreambox DM 600 PVR DVB-CPort Common Interface: , Modulateur RF: , Nombre de prises Péritel (SCART) :1 st, Compatible Dolby Digital, Télétexte, Electronic Program Guide (EPG), Minuteur: , Type de récepteur:DVB-C, Twin Tuners:No, Nombre de cartes acceptées:1, Lecteu www.commentcamarche.net/guide/917028-dream-multimedia-dreambox-dm-600-pvr-dvb-c
Les constructeurs et les destructeurs en langage C++La notion de constructeur Le constructeur est la fonction membre appelée automatiquement lors de la création d'un objet (en statique ou en dynamique). Cette fonction membre est la première fonction membre à être exécutée, il s'agit donc d'une... www.commentcamarche.net/contents/cpp/cppconst.php3
Java - L'héritageLa notion d'héritage Le concept d'héritage est un des concepts les plus importants de la programmation orientée objet, car il conditionne irréversiblement la façon selon laquelle un code Java est écrit. L'héritage est un mécanisme permettant de... www.commentcamarche.net/contents/java/javaherit.php3
Java - ConstructeursLe constructeur: une méthode particulière Pour instancier une classe, c'est-à-dire créer un objet à partir d'une classe, il s'agit d'utiliser l'opérateur new. En réalité l'opérateur new, lorsqu'il est utilisé, fait appel à une méthode spéciale de... www.commentcamarche.net/contents/java/javaconst.php3