Bonjour,
je voulais savoir si on pouvait utiliser sans danger des fonctions virtuelles dans les constructeurs ? Y a-t-il des problèmes avec le "niveau" d'abstraction ?
merci![]()
Bonjour,
je voulais savoir si on pouvait utiliser sans danger des fonctions virtuelles dans les constructeurs ? Y a-t-il des problèmes avec le "niveau" d'abstraction ?
merci![]()
Le résultat de ce code répondra à ta question.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <iostream> struct A { A() { foo(); } virtual void foo() { std::cout << "A::foo" << std::endl; } }; struct B : A { virtual void foo() { std::cout << "B::foo" << std::endl; } }; int main() { B b; }
Je connais la réponse, je l'ai lu hier et l'avais testé également pour vérifier ^^![]()
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
D'après ce que j'ai compris, une fonction virtuelle possède une v-table (table virtuelle) qui contient des pointeurs de fonctions vers les versions contenues dans les classes filles. La classe virtuelle sait laquelle choisir. Mais après je ne sais pas exactement comment ça marche, je suis bien curieux !
![]()
Salut,
Ce qui se passe, c'est que pour que pouvoir considérer que le contenu d'une classe dérivée est accessible, il faut attendre de se trouver après la liste d'initialisation (ou, si tu préfères, entre les deux accolades qui définissent le constructeur).
Or, la classe de base est la toute première chose qui est initialisée.
Il s'en suit que, lorsque tu te trouve dans le constructeur de la classe de base, la seule chose qui soit accessible, ce sont les membres (et les fonctions membres) de... la classe de base![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Partager