Héritage public, accès aux données privée de la mère

Héritage public, accès aux données privée de la mère - C++ - Programmation

Marsh Posté le 19-12-2003 à 11:11:44    

Salut,
Quelle est la manière la plus élégante pour permettre l'accès aux donnés membres privée de la mère à une classe dérivée fille ? Pour l'instant j'utilise le fait que j'ai défini la fille comme amie de la mère, peut être y a-t-il un meilleur moyen ?
 
sinon, le constructeur de la fille est le même que celui de la mère, donc dans le constructeur de la fille je me contente d'un simple appel au constructeur de la mère. c nul ? y a mieux ?
 
merci
   ANT

Reply

Marsh Posté le 19-12-2003 à 11:11:44   

Reply

Marsh Posté le 19-12-2003 à 11:16:06    

Soit tu passes tes donnees en protected, soit tu laisses en private et tu fais des accesseurs protected

Reply

Marsh Posté le 19-12-2003 à 11:17:41    

chrisbk a écrit :

Soit tu passes tes donnees en protected, soit tu laisses en private et tu fais des accesseurs protected
 


 
ça searit mieux que
friend class fille ?

Reply

Marsh Posté le 19-12-2003 à 11:18:02    

ANTSite a écrit :


 
ça searit mieux que
friend class fille ?


 
Ben, c'est un peu a ca que ca sert, protected

Reply

Marsh Posté le 19-12-2003 à 11:19:32    

ok merci je vais voir donc du côté de protected :-)

Reply

Marsh Posté le 19-12-2003 à 15:42:05    

simple petite question :
 
qu'est ce qu'un accesseur ?
 

Code :
  1. class A
  2. {
  3.    int Value;
  4. public:
  5.    int GetValue() { return Value; }
  6.    void SetValue(const int & val) { Value = val; }
  7. };


 
ca ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 19-12-2003 à 15:46:21    

oui.
 
perso, j'aime mieu la notion d'attribut qu'on a en C#, mais je sais pas si elle s'implémente de la même façon en C++.
 

Code :
  1. public class test
  2. {
  3.     private int _myVal;
  4.     public test()
  5.     {
  6.         this._myVal = 0;
  7.     }
  8.     public int myVal
  9.     {
  10.         get()
  11.         {
  12.             return this._myVal;
  13.         }
  14.         set()
  15.         {
  16.             this._myVal = ((value == null)?0:value);
  17.         }
  18.     }
  19. }


 
Comme ça, c'est visible comme un attribut, (monObj.myVal = 3;) et tu peux associer du code à l'affectation et à la lecture de la valeur. Ainsi que bloquer la lecture ou écriture en te contenant de ne pas l'indiquer.


Message édité par MagicBuzz le 19-12-2003 à 15:48:11
Reply

Marsh Posté le 19-12-2003 à 15:52:12    

oui, je connaissais la notation c#, il me semble pas qu'elle s'applique en c++ (d'ailleurs en c++ managé on ecrit get_myVal et set_myVal je crois), mais j'ignorais qu'on appelait ca un accesseur :)
 
sinon, je vois comme interet de cette méthode une plus grande sécurité d'accès au données possible, existe-t-il d'autres avantages/inconvénients ?


Message édité par blackgoddess le 19-12-2003 à 15:52:28

---------------
-( BlackGoddess )-
Reply

Marsh Posté le 19-12-2003 à 16:07:24    

Bah y'a aussi la validation des données lors de la lecture/écriture.
 
Mettons que tu stockes dans ton objet un mot de pass.
Pour des raisons de performances, le mot de pass doit être stocké dans l'objet en clair, mais pour des raisons de sécurité, il doit être en crypté dans le code du programme principal.
 
A ce moment, tu vas pouvoir mettre dans tes accesseurs l'envryption et la décryption du mot de pass.
 
De la même façon, mettons que tu veuilles respecter un standard de complexité du mot de passe. Par exemple, il faut qu'il fasse plus de 13 caractères, et qu'il contienne au moins 10% de caractères ascii étendus, et à la fois des caractères alpha et numéririques pour le reste. dans ton accesseur "set", tu pourras effectuer la validation, et lever une exception si le mot de pass n'est pas assez complexe.
 
Ou alors, tu as un objet "division".
 
Avec dividante et diviseur comme attributs.
 
Ton accesseur du diviseur devra contrôler que l'ont ne met jamais 0 dedans.
 
En fait, ça garantis la sécurité d'accès aux données, mais aussi l'intégrité.


Message édité par MagicBuzz le 19-12-2003 à 16:08:20
Reply

Marsh Posté le 19-12-2003 à 16:10:28    

bien, merci :jap:


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 19-12-2003 à 16:10:28   

Reply

Marsh Posté le 19-12-2003 à 19:44:17    

Après avoir bossé sur un gros projet en Delphi, je ne suis pas un gros fan de ces trucs. Mais peut-être que C# fait ça mieux que Delphi aussi :)
 
Par exemple, est-ce qu'une propriété en lecture-ecriture peut-être considérée comme une lvalue ?
 
Si ce n'est pas le cas, l'interet principal de ce mecanisme tombe à l'eau ( pouvoir mettre de la validation sur les accès à un attibut sans avoir à changer le code client ). À ce compte là, autant forcer l'utilisation d'accesseurs dès le debut car au moins le client sait exactement à quoi s'en tenir.

Reply

Marsh Posté le 19-12-2003 à 19:45:36    

Kristoph a écrit :

Par exemple, est-ce qu'une propriété en lecture-ecriture peut-être considérée comme une lvalue ?


 
absolument
(j'ai peur de pas bien comprendre quand meme, ca me parait evident (ceci dit je connais pas delphi donc bon)

Reply

Marsh Posté le 19-12-2003 à 19:48:44    

chrisbk a écrit :


 
absolument
(j'ai peur de pas bien comprendre quand meme, ca me parait evident (ceci dit je connais pas delphi donc bon)


 
Il y a une difference entre affectable et lvalue en fait. Peut-être que le terme lvalue n'est pas le bon. Peut on passer un attribut en paramètre à une fonction qui attend une reference ? Peut on prendre l'addresse d'un attribut ?

Reply

Marsh Posté le 19-12-2003 à 20:02:49    

Kristoph a écrit :


 
Il y a une difference entre affectable et lvalue en fait. Peut-être que le terme lvalue n'est pas le bon. Peut on passer un attribut en paramètre à une fonction qui attend une reference ? Peut on prendre l'addresse d'un attribut ?


 
c'est la ma foi une excellent question (sauf pour l'histoire d'adresse qui n'a pas de sens en c#), j'essayerais a l'occas
 
edit : a la reflexion, je pense que c'est pas la peine d'essayer, quand tu va donner la proprio a ta fonction ca va faire un get et schluss


Message édité par chrisbk le 19-12-2003 à 20:04:16
Reply

Marsh Posté le 19-12-2003 à 20:16:21    

la différence va au delà de la l-value et de l'affectation. en C les tableaux ne sont pas des l-value, ce qui implique l'impossibilité de réaliser une affectation. en C++, outre cette contrainte, on ne peut pas construire un tableau à partir d'un autre (constructeur de recopie)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed