Se connecter

Informatique

Programmation

Sujet : C++ comment modifier un tableau mis en privé.
1
Masterpou2
Niveau 10
11 décembre 2017 à 20:29:01

Salut, alors je bloque sur ça.

J'aimerais que quand je marque :

MaClasse.t[i]=0 ;

Ou t est privé.

t[i] prenne la valeur 0.

Du coup je pourrais faire quelque chose du genre :

setT(int i, int b){
t[i]=b ;
}

Mais du coup au lieu de marquer MaClasse.t[i]=0 je marquerais setT(i,0) et c'est pas souhaitable niveau lisibilité.

Du coup je me demandais si on pouvais utiliser operator= dans la classe pour ce cas précis.

:merci:

MonsieurBeauf
Niveau 10
11 décembre 2017 à 20:38:07

de mémoire tu peux surcharger l'opérateur [] afin de faire getter et setter en fonction du placement du mot clé const.

Dans le cadre de manipulation de matrices j'avais un jour fait un truc comme ça :


double operator ()(int i, int j)const; 
double &operator ()(int i, int j);

Ce n'est pas tableaux mais ça doit marcher de la même façon. Enfin.. je sais pas si ça résout ton problème.

whiteapplex
Niveau 10
11 décembre 2017 à 21:04:39

MaClasse.t est privé, tu ne peux donc pas y accéder.
Par contre, tu peux y accéder via MaClasse.getT(), tu pourras définir les droits d'accès au tableau (lecture/ecriture) en modifiant avec des consts (mais pour lecture & ecriture, n'en rajoute aucun)
Et tu utiliseras MaClasse.getT()[i]
En terme de propreté de code, je ferai un setter personnellement.

TechnoForce3
Niveau 36
11 décembre 2017 à 23:36:01

Faire un getter sur ton tableau pour pouvoir le modifier casserait l'encapsulation. C'est normal en objet d'avoir des setters du style de celui qui te dérange, ça permet de s'assurer que l'on utilise bien ta classe comme il faut et qu'elle reste dans un état cohérent

godrik
Niveau 22
11 décembre 2017 à 23:52:54

J'ai une reponse un peu differente.
Si ce que tu veux c'est avoir un access direct au donnee. Alors peut etre cette donnee ne devrait pas etre prive.

Probablement il y a un probleme de modele. Si tu n'as pas de traitement particulier a faire quand on fix une valeure du tableau, alors l'encapsulation n'est pas utile. Si tu as un traitement particulier a faire, alors il faut une syntaxe pour declarer l'intention.

Apres comme ca a ete dit plus haut, ca peut se faire en retournant un objet dummy qui fournit une interface avec l'operateur [].

Mais la question fondamental est "pourquoi c'est prive?" Est ce que c'est prive parceque la religion de l'oriente objet le dicte? Ou est ce qu'il y a une bonne raison?

Refeuh
Niveau 21
12 décembre 2017 à 13:40:32

Je rejoins Godrik ; tout mettre en privé pour ensuite rajouter systematique getter/setter, ce n'est pas forcement utile. Sur des POD ou des structures basique de "convenience", l'encapsulation n'est pas toujours souhaitee.
Et si tu as une classe hybride, le mieux serait p-e de splitter en demotant une partie des donnees dans une structure plus legere et facile d'acces, en gardant les interfaces publiques la oú c'est utile.

1
Sujet : C++ comment modifier un tableau mis en privé.
   Retour haut de page
Consulter la version web de cette page