Bonjour tout le monde,
Je vous écris car je me retrouve confronté à un cas que je ne suis pas certain de comprendre: j'ai deux classes : une classe mère et une classe fille. Fille hérite de mère. Est ce que fille doit redécalrer et définir les constructeurs déclarés et présents dans la classe mère? Je ne le pensais pas mais le code suivant fonctionnne :
alors que le code suivant (le même que celui au dessus mais en supprimant le constructeur de fille ligne 19) ne fonctionne pas :
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
18
19
20
21
22
23
24
25
26
27 class mere { private: int member; public: mere(/* args */) =default; inline explicit mere(int setupvalue) : member(setupvalue){std::cout<<"construction mere"<<std::endl;}; virtual ~mere()= default; inline virtual int proceed (int a){return a;}; }; class fille : public mere { private: /* data */ public: fille(/* args */) { std::cout << "Fille" << std::endl; }; explicit fille(int a) : mere(a) { std::cout << "construction fille" << std::endl; }; //fonctionne ~fille() override = default; }; //main.cpp int main(int, char**){ std::cout << "Hello, from vtableTests!\n"; fille test(5); std::cout<<test.proceed(5)<<std::endl; }
Je pensais que le constructeur de fille allait naturellement chercher celui de la mère ...
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
18
19
20
21
22
23
24
25
26
27
28 class mere { private: int member; public: mere(/* args */) =default; inline explicit mere(int setupvalue) : member(setupvalue){std::cout<<"construction mere"<<std::endl;}; virtual ~mere()= default; inline virtual int proceed (int a){return a;}; }; class fille : public mere { private: /* data */ public: fille(/* args */) { std::cout << "Fille" << std::endl; }; //explicit fille(int a) : mere(a) { std::cout << "construction fille" << std::endl; }; //ne fonctionne pas ~fille() override = default; }; //main.cpp int main(int, char**){ std::cout << "Hello, from vtableTests!\n"; fille test(5); std::cout<<test.proceed(5)<<std::endl; }
Partager