Polumorphisme pointeur

cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010 - 11 déc. 2009 à 20:04
dragonjoker59 Messages postés 92 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 23 septembre 2015 - 12 févr. 2010 à 14:12
Bonjour,

Admettons :

class A
{
  private :
    ....
  protected :
    void Insertapres(A * nouveau, A * source = this){.....}
};

classe B : protected A
{
  private :
     ....
  public :
    ....
    void TrucAFaire() {Insertapres(new B(..,..)}
};




Que vaut this dans TrucAFaire, vaut t'il la classe B ou la classe A?

Merci

Zives

3 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 déc. 2009 à 21:05
La question ne se pose pas, ce n'est pas possible:
error: `this' may not be used in this context


"this" représente un pointeur sur ton instance de classe. Donc il est toujours du type duquel tu l'as instancié.
Par exemple: A* c = new B; Ici "c" (et donc le "this" dans c) est de type B, même s'il est "upcasté" en type A (c'est-à-dire masquer sous le type A).
0
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
12 déc. 2009 à 07:54
D'accord merci. Je me suis débrouillé autrement en créant une sorte de virtual this.
J'ai mis A * m_me end donnée membre de A. Le constructeur de A prend un pointeur de A en paramètre.
Je n'ai plus qu'a, dans le constructeur de B rajouter B(): A(this); Et voila le tour est joué.

Zives
0
dragonjoker59 Messages postés 92 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 23 septembre 2015
12 févr. 2010 à 14:12
T'as overloadé this ? C'est moche...
0
Rejoignez-nous