cs_yvesyves
Messages postés561Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention11 octobre 2010
-
11 déc. 2009 à 20:04
dragonjoker59
Messages postés92Date d'inscriptionsamedi 26 mars 2005StatutMembreDernière intervention23 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?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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).
cs_yvesyves
Messages postés561Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention11 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é.