Question sur les objets constants en POO

Premiers pas en POO - cours C++

a marqué ce sujet comme résolu.

Bonjour,

je suis le cours de C++ et j’attaque la partie sur la POO.

Dans la 1ere partie il est dit qu’il est intéressant de rendre autant que possible les fonctions membres constantes pour éviter des modifications involontaires.

Par contre imaginons que je veuille sur la même fraction connaitre sa valeur réelle ET avoir une simplification. Si je déclare la fonction membre "valeur_reelle()" constante, est-ce que je peux continuer à l’utiliser sur un objet Fraction non constant ?

J’imagine que l’idée c’est si je veux juste la valeur réelle j’instancie un objet Fraction comme constant et si je veux une simplification en plus je le laisse non-constant.

Merci d’avance

Par contre imaginons que je veuille sur la même fraction connaitre sa valeur réelle ET avoir une simplification. Si je déclare la fonction membre "valeur_reelle()" constante, est-ce que je peux continuer à l’utiliser sur un objet Fraction non constant ?

Vinco67

Oui. En revanche, tu ne pourras pas utiliser de méthode non déclarée constante sur un objet constant.

Le mot-clé const garantit que ton objet ne sera pas modifié (à moins d’utiliser mutable dans certains cas, mais ce n’est pas le sujet).

Bonjour,

Si je comprends bien ton post, contrairement à ton titre, ce n’est pas l’objet (ou l’instanciation de ton objet) qui est constant, mais une fonction membre qui est constante !

Donc, si tu crée une instanciation constante de ton objet, il n’y a que le constructeur qui soit capable de modifier les attribues (la simplification/réduction se fera, si possible dans le constructeur, et uniquement à ce moment là!) ensuite il ne sera plus possible de modifier les attribues.

const fraction myFraction {4, 8};   // si simplification dans le constructeur, donnera 1/2 !

Si tu crée une instanciation non-constante, toute les fonctions membres, qui ne sont pas déclarées constantes, pourrons modifier les valeurs membres. Par contre, si une fonction membre est déclarée constante, elle ne peut pas modifier les attribues de la classe, même si l’instanciation de cette classe est non-constante.

void fraction::display () const // ne peut pas modifier les attribues de l'objet, donc simplifier la fraction
{
...
}
void fraction::simplifier () // peut modifier les attribues de l'objet
{
...
}

Cordialement.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte