Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
lang:cpp:classes [2025/07/26 23:50] – Précision sur l'héritage et les méthodes virtuelles root | lang:cpp:classes [2025/07/28 13:38] (Version actuelle) – [Version "Rule of Zero"] : clarification du commentaire ''does not have a user-declared'' root |
---|
=====Sans héritage===== | =====Sans héritage===== |
| |
====Multiples constructeurs==== | |
Il est possible d'appeler un constructeur depuis un autre constructeur. C'est pratique si on souhaite avoir deux constructeurs très proche. | |
| |
Bien qu'on soit dans le paragraphe sans héritage, j'ai mis un cas avec héritage pour montrer qu'on a pas besoin d'appeler le constructeur du parent si on appelle un autre constructeur. | |
| |
<code cpp> | |
class A{}; | |
class B : public A | |
{ | |
public: | |
// Call constructor B(int) from constructor B(). | |
// No need (forbidden) to call A. | |
B() : B(5){} | |
// Avoid default function argument | |
B(int a/* = 5*/):A(), a_(a){} | |
| |
private: | |
int a_; | |
}; | |
</code> | |
| |
====Version "Rule of Zero"==== | ====Version "Rule of Zero"==== |
<cite>[[https://stackoverflow.com/questions/40959659/c-rule-of-zero-what-is-user-declared-constructor|C++ Rule of Zero & what is "user-declared" constructor?]] {{ :lang:cpp:class:c_rule_of_zero_what_is_user-declared_constructor_-_stack_overflow_2020-03-09_23_01_28_.html |Archive du 04/12/2016 le 09/03/2020}}</cite></blockquote> | <cite>[[https://stackoverflow.com/questions/40959659/c-rule-of-zero-what-is-user-declared-constructor|C++ Rule of Zero & what is "user-declared" constructor?]] {{ :lang:cpp:class:c_rule_of_zero_what_is_user-declared_constructor_-_stack_overflow_2020-03-09_23_01_28_.html |Archive du 04/12/2016 le 09/03/2020}}</cite></blockquote> |
| |
Par ''does not have a user-declared'', cela signifie aussi ne pas utiliser ''= default;''. | ''does not have a user-declared'' signifie également ne pas utiliser ''= default;''. |
| |
Autre explication : [[https://www.fluentcpp.com/2019/04/23/the-rule-of-zero-zero-constructor-zero-calorie/|The Rule of Zero in C++]] {{ :lang:cpp:class:the_rule_of_zero_in_c_-_fluent_c_2019-12-18_23_16_30_.html |Archive du 23/04/2019 le 18/12/2019}} | Autre explication : [[https://www.fluentcpp.com/2019/04/23/the-rule-of-zero-zero-constructor-zero-calorie/|The Rule of Zero in C++]] {{ :lang:cpp:class:the_rule_of_zero_in_c_-_fluent_c_2019-12-18_23_16_30_.html |Archive du 23/04/2019 le 18/12/2019}} |
| |
Lors de l'instantiation d'une classe, un constructeur sera systématiquement appelé à chaque niveau d'héritage, en commençant par celui en bas de la hiérarchie. | Lors de l'instantiation d'une classe, un constructeur sera systématiquement appelé à chaque niveau d'héritage, en commençant par celui en bas de la hiérarchie. |
| |
| Il est possible d'appeler un constructeur depuis un autre constructeur. C'est pratique si on souhaite avoir deux constructeurs très proche. |
| |
| <code cpp> |
| class A{}; |
| class B : public A |
| { |
| public: |
| // Call constructor B(int) from constructor B(). |
| // No need (forbidden) to call A. |
| B() : B(5){} |
| // Avoid default function argument |
| B(int a/* = 5*/):A(), a_(a){} |
| |
| private: |
| int a_; |
| }; |
| </code> |
| |
* Destructeur | * Destructeur |