Maison >développement back-end >C++ >Comment initialiser une variable membre const dans un constructeur C ?

Comment initialiser une variable membre const dans un constructeur C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 02:58:29996parcourir

How do you initialize a const member variable in a C   constructor?

Maintenir les propriétés de classe immuables avec l'initialisation du constructeur

En C, les constructeurs jouent un rôle crucial dans l'établissement de l'état initial d'un objet. Parfois, nous rencontrons des situations dans lesquelles certaines propriétés de classe doivent rester inchangées tout au long de la durée de vie de l'instance. Un scénario courant est l'attribution d'un pointeur constant lors de la création d'un objet.

Considérez l'extrait de code suivant :

<code class="C++">class Foo;

class Bar {
public:
    Foo * const foo;
    Bar(Foo* foo) {
        this->foo = foo;
    }
};

class Foo {
public:
  int a;
};</code>

L'intention ici est de créer un objet Bar avec un pointeur non modifiable. à une instance Foo. Cependant, lors de la compilation, nous rencontrons une erreur. En effet, le pointeur "this" n'est pas directement accessible dans le constructeur d'une classe.

Pour surmonter ce problème, nous devons initialiser le champ constant dans la liste d'initialisation du constructeur en utilisant la syntaxe suivante :

<code class="C++">Bar(Foo* _foo) : foo(_foo) {
}</code>

Dans ce code mis à jour, nous renommons le paramètre entrant pour éviter toute confusion avec le membre de l'instance. Dans la liste d'initialisation, nous attribuons explicitement la valeur de l'argument _foo au membre constant foo.

En utilisant cette technique, nous définissons efficacement le pointeur foo sur une valeur const lors de la construction de l'objet, garantissant ainsi son immuabilité tout au long du processus. durée de vie de l'instance Bar.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn