begin process at 2012 05 29 13:55:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Polymorphisme et surcharge d'opérateur


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Polymorphisme et surcharge d'opérateur

vendredi 25 mars 2005 à 11:49:25 | Polymorphisme et surcharge d'opérateur

blh_ind

Bonjour à tous.
Probleme de polymorphisme, je vais pété un plomb

Question : comment obtenir = Fils à l'étape 4 5 7 8 sans caster.

Execution

------------ Etape 01 ------------
Creation Pere
------------ Etape 02 ------------
Creation Pere
Creation Fils
------------ Etape 03 ------------
------------ Etape 04 ------------
= Pere
------------ Etape 05 ------------
= Pere
------------ Etape 06 ------------
Creation Pere
Creation Fils
------------ Etape 07 ------------
= Pere
------------ Etape 08 ------------
= Pere
------------ Etape 09 ------------
Do Fils
------------ Etape 10 ------------
Creation Pere
Creation Fils
------------ Etape 11 ------------
Creation Pere
Creation Fils
------------ Etape 12 ------------
= Fils
------------ Etape 98 ------------
Destruction Pere
------------ Etape 99 ------------
Destruction Fils
Destruction Pere
Appuyez sur une touche pour continuer...

Code :

#include <iostream>
using namespace std;

/* *************************************************** */

class Pere
{
public:
  Pere::Pere()            {cout << "Creation Pere" << endl;}
  virtual Pere::~Pere()   {cout << "Destruction Pere" << endl;}
  virtual void Pere::Do() {cout << "Do Pere" << endl;}
  virtual Pere & operator = (const Pere & source)   {cout << "= Pere" << endl; return *this;}
};

/* *************************************************** */

class Fils : public Pere
{
public:
  Fils()        {cout << "Creation Fils" << endl;}
  ~Fils()       {cout << "Destruction Fils" << endl;}
  void Do()     {cout << "Do Fils" << endl;}
  virtual Fils & operator = (const Fils & source) {cout << "= Fils" << endl; return *this;}
};

/* *************************************************** */

int main(int argc, char *argv[])
{
  Pere * Tab[2];
  cout << "------------ Etape 01 ------------" << endl;
  Tab[0] = new Pere;
  cout << "------------ Etape 02 ------------" << endl;
  Tab[1] = new Fils;
  cout << "------------ Etape 03 ------------" << endl;
  Fils * F1;
  cout << "------------ Etape 04 ------------" << endl;
  * Tab[1] = * F1;
  cout << "------------ Etape 05 ------------" << endl;
  Tab[1]->operator=(*F1);
  cout << "------------ Etape 06 ------------" << endl;
  Fils  F2;
  cout << "------------ Etape 07 ------------" << endl;
  * Tab[1] = F2;
  cout << "------------ Etape 08 ------------" << endl;
  Tab[1]->operator=(F2);
  cout << "------------ Etape 09 ------------" << endl;
  Tab[1]->Do();
  cout << "------------ Etape 10 ------------" << endl;
  Fils  F3;
  cout << "------------ Etape 11 ------------" << endl;
  Fils  F4;
  cout << "------------ Etape 12 ------------" << endl;
  F3 = F4;

  cout << "------------ Etape 98 ------------" << endl;
  delete Tab[0];
  cout << "------------ Etape 99 ------------" << endl;
  delete Tab[1];

  system("PAUSE");
  return 1;
}


vendredi 25 mars 2005 à 12:43:40 | Re : Polymorphisme et surcharge d'opérateur

ymca2003

2 trucs que je vois :
- Fils * F1;
  cout << "------------ Etape 04 ------------" << endl;
  * Tab[1] = * F1;
=> F1 n'est jamais crée, il faut faire Fils * F1 = new Fils.

- ton operateur = pour les fils ne sera jamais appelé par un pointeur sur Pere car elles ont beau être virtuelles ce ne sont pas les même (les arguments ne sont pas les même)
=> mettre dans le fils
virtual Pere & operator = (const Pere & source) {cout << "= Fils" << endl; return *this;}
pour réalisre une surcharge correcte.
vendredi 25 mars 2005 à 13:27:21 | Re : Polymorphisme et surcharge d'opérateur

blh_ind

Tu as raison pour :
Fils * F1 = new Fils;

Mais je ne comprends cette phrase :

ton operateur = pour les fils ne sera jamais appelé par un pointeur sur Pere car elles ont beau être virtuelles ce ne sont pas les même (les arguments ne sont pas les même)


=> mettre dans le fils
virtual Pere & operator = (const Pere & source) {cout << "= Fils" << endl; return *this;}

Si je mets ca, un fils devient pere ?
vendredi 25 mars 2005 à 13:46:31 | Re : Polymorphisme et surcharge d'opérateur

blh_ind

C'est pas mieux ca dans fils :

virtual Fils & operator = (const Pere & source) {cout << "= Fils" << endl; return *this;}

vendredi 25 mars 2005 à 14:43:20 | Re : Polymorphisme et surcharge d'opérateur

ymca2003

Si ca marche tu peux. sinon un fils est un père de toute façon.

Par contre je sais pas si faire un operateur = virtuel est une bonne idée, car normalement c'est pour manipuler des objets de même nature (à gauche et à droite) sans passer par des pointeurs. Ca n'a pas beaucoup de sens de faire une copie en profondeur d'un fils vers un père.

vendredi 25 mars 2005 à 15:19:38 | Re : Polymorphisme et surcharge d'opérateur

blh_ind

  Pere * Tab[2];
  Tab[1] = new Fils;
  Fils * F1
= new Fils;
  * Tab[1] = * F1;

Ici normalement
* Tab[1] et * F1 sont tout deux des fils. Si j'utilise :
virtual Fils & operator = (const Pere & source) {... return *this;}
Je ne peux recopier les variables de la classe Fils, seulement celles de la classe pere.

vendredi 25 mars 2005 à 15:34:04 | Re : Polymorphisme et surcharge d'opérateur

ymca2003

C'est assez bizzare l'utilisation que tu veux faire. si tu veux mettre un nouveaux fils dans le tableau c'est plutot comme cela qu'il faut faire :
Tab[1] = new Fils(F1);
Après avoir bien sur fait un constructeur adequate.

vendredi 25 mars 2005 à 17:25:46 | Re : Polymorphisme et surcharge d'opérateur

blh_ind

Moi ca ma l'air naturel et ce que tu me donnes n'est pas du polymorphisme


Cette discussion est classée dans : tab, fils, pere, cout, etape


Répondre à ce message

Sujets en rapport avec ce message

récuperation de l'etat d'un processus [ par Spy63 ] J'ai un programme en C systeme que j'ecrit sous vi pour linux dans lequel:-j'ai un pere et deux fils.-Mon but et d'atendre que les fils soit en pause fork: communication entre pere et fils [ par nezdeboeuf62 ] Pour faire un chat, j'ai un programme qui contient une map (librairie STL, template).Bien sur cette map evolue regulierement.Le probleme c'est que apr tuer createProcess api c [ par tanaka13 ] bonjour à tous, voila mon probleme je debute avec les api en c et je suis largué. Je viens juste de renvoyer des parametres d'une fenetre console pe Variable global et processus [ par obasileus ] Salut j'ai un programme comportant 4 processus fils qui lancent chacun 4 threads qui gèrent 2 problemes producteur/consom. Le processus pere à besoin pb de chaine avec espace ! [ par blinix123 ] #include #include #include struct cd{ char artiste [30]; char album [30]; char date [10]; char chansons [30];}; void remplissage ( Allocation statique ou dynamique [ par luhtor ] Bon alors, j'ai un exemple de programme. Mais je me pose la question de sa validité sachant que ce que vous allez voir. C'est correct dans certain lan La hierarchie pere et fils [:(] !!!!!!!!!!!! HELP!!!!!!!!!!! [ par laetitia334 ] bonjour a tous! j'ai un probleme avec un programme! car je ne comprend pas les termes utilisés:Main (){int pid;printf("je suis le processus initial \n problème classe polynome [ par cricri nature ] Bonjour, j'ai réussi à finir ma classe monome et doit maintenant créer une classe polynome. Seulement il y a 2 erreurs que je ne comprend pas. Pouvez- pb de pointeurs !! [ par blinix123 ] Bonjour CPP ! (ici un p'tit nouveau deVB qui se met au C++)Alors voila, dans ce petit programme, j'ai une erreur, je le lance, 0 erreur, mais lors de comparaison d'entiers [ par blinix123 ] Bonjour,Alors petit problème facile pour vous je pense :struct cd{ char realisateur [64]; char titre [64]; char date [20]; char duree [64];}; void


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales