C++ : Modifier l'attibut d'une classe
Résolu
gagner79
Messages postés
261
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour !
J'ai une classe A, qui a pour attribut b :
Je souhaite tout simplement modifier b de l'extérieur.
Je pourrais créer une méthode, mais comme j'ai plusieurs attributs par classe, et qu'il me faudrait 2 méthodes par attribut (une pour le lire, une pour le modifier), je n'ai pas envie de faire 20 fonctions.
Y a t-il une autre solution ?
Pourrait-on mélanger une classe avec une structure, pour que la classe s'occupe des fonctions et que la structure s'occupe des attributs ?
Merci d'avance.
J'ai une classe A, qui a pour attribut b :
class A { int b; };
Je souhaite tout simplement modifier b de l'extérieur.
Je pourrais créer une méthode, mais comme j'ai plusieurs attributs par classe, et qu'il me faudrait 2 méthodes par attribut (une pour le lire, une pour le modifier), je n'ai pas envie de faire 20 fonctions.
Y a t-il une autre solution ?
Pourrait-on mélanger une classe avec une structure, pour que la classe s'occupe des fonctions et que la structure s'occupe des attributs ?
Merci d'avance.
5 réponses
salut
je crois qu'il te faut lire quelque sur les classes..
la solution pour ton problème et de mettre le attributs en public pour pouvoir le modifier depuis l'extérieur du classe
exemple :
see you
je crois qu'il te faut lire quelque sur les classes..
la solution pour ton problème et de mettre le attributs en public pour pouvoir le modifier depuis l'extérieur du classe
exemple :
class A { public : int b; }; A obj; /* ........ ....... ....... */ obj.b = 2:
see you
Je pourrais créer une méthode, mais comme j'ai plusieurs attributs par classe, et qu'il me faudrait 2 méthodes par attribut (une pour le lire, une pour le modifier), je n'ai pas envie de faire 20 fonctions.
Ben oui c'est dommage de ne pas en avoir l'envie car c'est le principe même de l'encapsulation: ne pas avoir directement accès aux données; mais tu as le choix... voir la réponse de neo, réponse qui est correcte.
Vouloir transgresser les règles de base des classes, pourquoi pas... mais alors pourquoi utiliser des classes et ne pas carrément utiliser des structures...
Bon choix.
Ben oui c'est dommage de ne pas en avoir l'envie car c'est le principe même de l'encapsulation: ne pas avoir directement accès aux données; mais tu as le choix... voir la réponse de neo, réponse qui est correcte.
Vouloir transgresser les règles de base des classes, pourquoi pas... mais alors pourquoi utiliser des classes et ne pas carrément utiliser des structures...
Bon choix.
Il te faut créer des accesseurs pour chaque attribut privé de ta classe (ça doit rejoindre le principe d'encapsulation dont parle loupius)
class A { private : int b; public : int get_b() { return b; } void set_b(int b2) { b=b2; } };
Si on a le droit de "transgresser les règles de base des classes" et mettre les attributs en public je vais pas me gêner...
Merci pour vos réponses :)
Merci pour vos réponses :)
Ici tu n'a qu'un int, alors forcément tu te dis "je vais le mettre en public, c'est plus simple" cependant c'est une très mauvaise habitude car dans des cas à peine plus complexe, tu ne voudras pas que l'utilisateur d'une classe puisse avoir accès à tes attributs.
Exemple simple, tu créé une classe pour représenter un rectangle, avec par exemple un tableau de 4 points. Si ce tableau de points est public tout utilisateur pourra modifier manuellement tes points, au risque bien évidemment que son "rectangle" n'en sois plus un.
Pour faire une classe solide il faut donc définir les actions autorisées et interdites par l'utilisateur. En général, il vaut mieux interdire les attributs (les mettre en private) et leur fournir des accesseurs (en public) plutôt que de mettre naïvement tout en public.
Tu dis qu'on a le droit de "transgresser les règles de base des classes", ça ne veut pas dire qu'il faut le faire systématiquement, mais juste que le langage C++ permet aux utilisateurs les plus avertis de faire des manipulations non standards lorsqu'il n'y a pas d'autre solution.
Exemple simple, tu créé une classe pour représenter un rectangle, avec par exemple un tableau de 4 points. Si ce tableau de points est public tout utilisateur pourra modifier manuellement tes points, au risque bien évidemment que son "rectangle" n'en sois plus un.
Pour faire une classe solide il faut donc définir les actions autorisées et interdites par l'utilisateur. En général, il vaut mieux interdire les attributs (les mettre en private) et leur fournir des accesseurs (en public) plutôt que de mettre naïvement tout en public.
Tu dis qu'on a le droit de "transgresser les règles de base des classes", ça ne veut pas dire qu'il faut le faire systématiquement, mais juste que le langage C++ permet aux utilisateurs les plus avertis de faire des manipulations non standards lorsqu'il n'y a pas d'autre solution.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Le 'C' est décrié par beaucoup pour être un langage trop permissif et c'est sans doute vrai. Cette permissivité permet de n'avoir aucune barrière, en 'C' on peut tout faire, aucun programme est impossible... mais cette permissivité à son revers: elle impose au programmeur de savoir précisément ce qu'il fait; pour cela il y a des règles préconisées, préconisées mais pas interdites... libre au programmeur d'écrire les meilleurs programmes... ou les pires.
Bon choix.
Bon choix.