Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD11 et autre] Programmation objet.

5 réponses
Avatar
Daireaux Jean-Baptiste
Bonjour,

j'ai un petit problème de conception objet.

j'ai une classe A qui contient des membres et des méthodes.

soit A:meth1, A:meth2 et A:meth3 les méthodes de A
Et A:champ1 et A:champ2 deux membres 'PROTÉGÉ' de A (correspondant a des
détails d'implémentation masqué à l'utilisateur de la classe mais utile
au développement des classes qui hériterons de A)

La classe A dispose aussi d'une méthode A:copie qui permet de faire une
copie.

Donc j'ai le code suivant :

aa est un A dynamique
ab est un A dynamique

aa=allouer un A
aa:meth1()

ab:copie(aa)

...

Bien tout va bien jusque la.

J'ai ensuite une classe B qui hérite de A.
Pour des raisons d'implémentation, dans la classe B je surcharge la
méthode copie venant de A

soit le code suivant :


PROCEDURE VIRTUELLE copie ( elt est un objet B dynamique )

:champ1=elt:champ1
:champ2=elt:champ2
...

mon problème est le message d'erreur suivant :

Erreur :Le membre 'champ1' de la classe 'A' est protégé; il n'est pas
accessible hors des méthodes de la classe 'A' ou des classes dérivées de
'A'.

Il n'accepte pas mon code !!!

Comment puis-je résoudre le problème sans rendre les champs de A 'public'

Merci.

5 réponses

Avatar
patrice
d'apres l'aide, la lecture est autorisé et l'écriture est interdite
donc faudrait faire des fonctions SetXXX public pour chaque élément à écrire

SetChamp1(elt:champ1)
SetChamp2(elt:champ1)



"Daireaux Jean-Baptiste" a écrit
dans le message de news:47a738fa$0$852$
Bonjour,

j'ai un petit problème de conception objet.

j'ai une classe A qui contient des membres et des méthodes.

soit A:meth1, A:meth2 et A:meth3 les méthodes de A
Et A:champ1 et A:champ2 deux membres 'PROTÉGÉ' de A (correspondant a des
détails d'implémentation masqué à l'utilisateur de la classe mais utile
au développement des classes qui hériterons de A)

La classe A dispose aussi d'une méthode A:copie qui permet de faire une
copie.

Donc j'ai le code suivant :

aa est un A dynamique
ab est un A dynamique

aa=allouer un A
aa:meth1()

ab:copie(aa)

...

Bien tout va bien jusque la.

J'ai ensuite une classe B qui hérite de A.
Pour des raisons d'implémentation, dans la classe B je surcharge la
méthode copie venant de A

soit le code suivant :


PROCEDURE VIRTUELLE copie ( elt est un objet B dynamique )

:champ1=elt:champ1
:champ2=elt:champ2
...

mon problème est le message d'erreur suivant :

Erreur :Le membre 'champ1' de la classe 'A' est protégé; il n'est pas
accessible hors des méthodes de la classe 'A' ou des classes dérivées de
'A'.

Il n'accepte pas mon code !!!

Comment puis-je résoudre le problème sans rendre les champs de A 'public'

Merci.


Avatar
Daireaux Jean-Baptiste
Ps: j'ai remis le message en ordre...

"Daireaux Jean-Baptiste" a écrit
dans le message de news:47a738fa$0$852$
Bonjour,

j'ai un petit problème de conception objet.

j'ai une classe A qui contient des membres et des méthodes.

soit A:meth1, A:meth2 et A:meth3 les méthodes de A
Et A:champ1 et A:champ2 deux membres 'PROTÉGÉ' de A (correspondant a des
détails d'implémentation masqué à l'utilisateur de la classe mais utile
au développement des classes qui hériterons de A)

La classe A dispose aussi d'une méthode A:copie qui permet de faire une
copie.

Donc j'ai le code suivant :

aa est un A dynamique
ab est un A dynamique

aa=allouer un A
aa:meth1()

ab:copie(aa)

...

Bien tout va bien jusque la.

J'ai ensuite une classe B qui hérite de A.
Pour des raisons d'implémentation, dans la classe B je surcharge la
méthode copie venant de A

soit le code suivant :


PROCEDURE VIRTUELLE copie ( elt est un objet B dynamique )

:champ1=elt:champ1
:champ2=elt:champ2
...

mon problème est le message d'erreur suivant :

Erreur :Le membre 'champ1' de la classe 'A' est protégé; il n'est pas
accessible hors des méthodes de la classe 'A' ou des classes dérivées de
'A'.

Il n'accepte pas mon code !!!

Comment puis-je résoudre le problème sans rendre les champs de A 'public'

Merci.








patrice a écrit :
> d'apres l'aide, la lecture est autorisé et l'écriture est interdite
> donc faudrait faire des fonctions SetXXX public pour chaque élément à
> écrire
>
> SetChamp1(elt:champ1)
> SetChamp2(elt:champ1)
>
>
>

Bonjour,

Je n'écrit pas dans elt:champ, Je le lis.
Et comme vous l'indiquez, je devrai pouvoir le faire non ?

de plus la méthode copie de la classe A écrite comme ceci :

PROCEDURE VIRTUELLE copie ( elt est un objet A dynamique )

:champ1=elt:champ1
:champ2=elt:champ2
...

fonctionne parfaitement.

Je site aussi la documentation :

<Accès> : Optionnel

Permet de restreindre l'accès à ce membre de la classe. 3 niveaux sont
disponibles :
- Privé : accès autorisé depuis un code de la classe
- Protégé : accès autorisé depuis un code de la classe ou un code d'une
classe dérivée (et "héritée")
- Public (par défaut) : accès autorisé depuis n'importe quel code de la
classe ou du projet.

--fin citation

merci quand même.
J.B.D.
Avatar
Romain PETIT
Il se trouve que patrice a formulé :
d'apres l'aide, la lecture est autorisé et l'écriture est interdite



Non, ses membres sont "protégés" (accès autorisé depuis un code de la
classe ou un code d'une classe dérivée)

Ne type pas les arguments de ta méthode dérivée, ça devrait marcher :

// méthode de la classe B
PROCEDURE VIRTUELLE copie ( elt)
:champ1=elt:champ1
:champ2=elt:champ2
...


A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
patrice
"Romain PETIT" a écrit dans le message de
news:
Il se trouve que patrice a formulé :
> d'apres l'aide, la lecture est autorisé et l'écriture est interdite

Non, ses membres sont "protégés" (accès autorisé depuis un code de la
classe ou un code d'une classe dérivée)



autant pour moi, j'ai lu l'aide de "proctected CONSTANT" qq ligne trop bas
donc le code de JB devrait compiler
que dit le ST ?
Avatar
Daireaux Jean-Baptiste
Romain PETIT a écrit :
Il se trouve que patrice a formulé :
d'apres l'aide, la lecture est autorisé et l'écriture est interdite



Non, ses membres sont "protégés" (accès autorisé depuis un code de la
classe ou un code d'une classe dérivée)

Ne type pas les arguments de ta méthode dérivée, ça devrait marcher :

// méthode de la classe B
PROCEDURE VIRTUELLE copie ( elt)
:champ1=elt:champ1
:champ2=elt:champ2
...


A+





Effectivement cela débloque mon problème.

Quelqu'un aurai la possibilité de leur signaler le problème à PC-SOFT.
Car j'ai pas le temps de me lancer dans un mini projet...


Merci beaucoup pour le coup de main.
J.B.D.