A voir également:
- Constructeur virtuel
- Metre virtuel - Guide
- Bureau virtuel windows 10 - Guide
- Pc virtuel - Télécharger - Émulation & Virtualisation
- Telecharger clavier arabe virtuel - Télécharger - Divers Web & Internet
- Ami virtuel - Guide
2 réponses
Un constructeur ne peut pas être virtuel, c'est logique: la virtualité installe le polymorphisme, donc si un constructeur pouvait être virtuel, il ne serait pas appellé lors de l'instantiation d'une classe dérivée... et en conséquence la partie classe mère ne serait pas pris en compte, c'est la cata!
Je ne comprends pas trop la partie:sachant toujours un constructeur estsynthétisé par le compilateur (peut-être dangereux).
Utilisation de 'this' indispensable ?
A priori, je n'ai pas de réponse.
Je l'ai jadis utilisé dans les constructeurs du type:
Un autre cas spécifique, pour moi, est l'utilisation avec Qt de la fonction 'connect'.
Je ne comprends pas trop la partie:sachant toujours un constructeur estsynthétisé par le compilateur (peut-être dangereux).
Utilisation de 'this' indispensable ?
A priori, je n'ai pas de réponse.
Je l'ai jadis utilisé dans les constructeurs du type:
ClasseExemple { public: ClasseExemple(int a, int b) { this->a = a; this->b = b; } ... private: int a,b; }On est obligé d'utiliser 'this' car le paramètre à le même nom qu'un membre de la classe.
Un autre cas spécifique, pour moi, est l'utilisation avec Qt de la fonction 'connect'.
merci togodo c'est ca , le probleme est que si la classe contient des pointeurs,le constructeur par défaut ne poura pas copier les adresses ou pointent les pointeurs c'est bien ca?
togodo
Messages postés
148
Date d'inscription
vendredi 19 septembre 2008
Statut
Membre
Dernière intervention
19 août 2009
8
11 janv. 2009 à 16:11
11 janv. 2009 à 16:11
Exemple :
1 objet "v1" de la classe V contient un pointeur char *a = new char[15];
Si tu instancies un objet v2 par le constructeur de copie tu auras.
Si tu as le constructeur par défaut.
Or a dans ce cas "v2.a" est une adresse (car c'est un pointeur), donc v2.a sera lié à la même adresse que v1.a.
Ce qui veux dire que si tu changes la valeur de v1.(*a) cela change aussi la valeur de v2.(*a) car la variable est stocké à la même adresse.
LE siteduzero explique bien cela il me semble...
Va voir sur https://openclassrooms.com/fr/courses/1894236-programmez-avec-le-langage-c#ss_part_3
1 objet "v1" de la classe V contient un pointeur char *a = new char[15];
Si tu instancies un objet v2 par le constructeur de copie tu auras.
V v1=new V(); V v2=v1;
Si tu as le constructeur par défaut.
v2.a=v1.a
Or a dans ce cas "v2.a" est une adresse (car c'est un pointeur), donc v2.a sera lié à la même adresse que v1.a.
Ce qui veux dire que si tu changes la valeur de v1.(*a) cela change aussi la valeur de v2.(*a) car la variable est stocké à la même adresse.
LE siteduzero explique bien cela il me semble...
Va voir sur https://openclassrooms.com/fr/courses/1894236-programmez-avec-le-langage-c#ss_part_3
11 janv. 2009 à 10:20
la 2me question c'est pourquoi c'est dangereux d'utiliser le constructeur synthétisé par le compilateur ?
11 janv. 2009 à 11:52
Il n'est pas du tout dangereux de l'utiliser (ou plutôt de le laisser utiliser par défaut), mais il faut savoir que ce constructeur fera le minimum, c'est-à-dire qu'il va simplement allouer de l'espace pour les variables sans les initialiser (sauf pour les statiques et les globales); c'est la raison pour laquelle, en général, on définit un constructeur qui va donner une valeur aux variables et donner aux pointeurs une correcte allocation mémoire.
11 janv. 2009 à 12:09
Lors de la construction par copie, le nouvelle objet va allouer les même adresses que l'objet qu'il copie,
et dès lors les composants seront liés ce qui n'est pas voulu.
Donc en bref si tu as des pointeurs il faut changer tes constructeurs.
Ca rime en plus :)
12 déc. 2017 à 13:19