C++ : Modifier l'attibut d'une classe

Résolu/Fermé
gagner79 Messages postés 261 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 20 décembre 2009 - 14 août 2009 à 21:16
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 15 août 2009 à 12:16
Bonjour !

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 :

class A
{
    public :
    int b;
};
A obj;
/*
........
.......
.......
*/
obj.b = 2:


see you
0
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.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 août 2009 à 02:09
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;
      }
};
0
gagner79 Messages postés 261 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 20 décembre 2009 40
15 août 2009 à 10:26
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 :)
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 août 2009 à 12:16
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.
0

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.
0