Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
lang:cpp:classes [2025/07/26 22:45] – [Version "Rule of Zero"] : précision dans un commentaire 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}} |
===Destructeur=== | ===Destructeur=== |
| |
Une classe doit avoir un destruteur virtuel si l'héritage est utilisée et que l'une des classes (elle, enfant ou parent) gère des ressources. | Une classe doit avoir un destructeur virtuel si l'héritage est utilisé et que l'une des classes (elle, enfant ou parent) gère des ressources. Cela inclut aussi des membres de type classe qui gère des ressources (par exemple ''std::string''), soit presque toutes les classes. |
| |
L'attribut ''virtual'' doit être placé dans la classe la plus parent. | L'attribut ''virtual'' doit être placé dans la classe la plus parent. |
| |
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 |