C++ : classe imbriquees... - Programmation
Marsh Posté le 19-02-2002 à 17:53:25
la classe B est dans l'espace de nommage de A
si elle est public, on peu y acceder hors de A en faisant A::B
la classe B peut alors avoir un nom plus simple que si elle etait hors de A
c'est par exemple comme ca que peuvent etre propose les iterateurs de la STL...
il n'y a alors aucun probleme a ce que tous se nomment iterateurs...
Marsh Posté le 19-02-2002 à 18:15:53
ben normalement non.
private c bien prive a la classe et personne d'autre.
maintenant faudrait trouver une copie de la norme C++.
si gcc l'accepte, Visual Studio.NET me le jette a la tete
Marsh Posté le 19-02-2002 à 18:18:44
deathsharp a écrit a écrit : ben normalement non. private c bien prive a la classe et personne d'autre. maintenant faudrait trouver une copie de la norme C++. si gcc l'accepte, Visual Studio.NET me le jette a la tete |
B est membre de A...
le compilo solaris le refuse aussi... mais le HP accepte
mais il me semble que gcc est plus proche de la norme...
Marsh Posté le 19-02-2002 à 20:16:02
Non les méthodes de B n'ont pas accès aux membres privés de A.
g++ a pas mal de pb avec les contrôles d'accès dès qu'on sort des sentiers battus.
Citation : |
[jfdsdjhfuetppo]--Message édité par DA TRUE CLOUSEAU--[/jfdsdjhfuetppo]
Marsh Posté le 20-02-2002 à 02:13:54
j'en apprends tous les jours
je connaissais le coup du typedef
dans la declaration de classe
mais pas les classes imbriquees en C++..
Et puisqu'on y est, on peut pas faire des instances de classes
anonymes par hasard ?
A+
LEGREG
Marsh Posté le 20-02-2002 à 08:42:34
legreg a écrit a écrit : j'en apprends tous les jours je connaissais le coup du typedef dans la declaration de classe mais pas les classes imbriquees en C++.. Et puisqu'on y est, on peut pas faire des instances de classes anonymes par hasard ? A+ LEGREG |
non, ça c claire ! ms à quoi ça pourrait bien te servir en plus !?
Marsh Posté le 20-02-2002 à 08:44:51
moi je trouve ça bisard cette histoire ! J'avais justement lu dans "programmez" qu'une classe interne peut accèder aux membres privés de la classe qui la contient. Ms apparement en fait, ça dépend du compilo !?
Marsh Posté le 20-02-2002 à 10:14:13
El_Gringo a écrit a écrit : moi je trouve ça bisard cette histoire ! J'avais justement lu dans "programmez" qu'une classe interne peut accèder aux membres privés de la classe qui la contient. Ms apparement en fait, ça dépend du compilo !? |
Ben en fait mon truc doit marcher sur quelques plates-formes...
sous linux, g++ no Pb
sous HP-UX aCC no Pb
sous Solaris Pb
Donc je voulais savoir quel etait la norme...
Or il semblerait que la norme soit que l'acces est interdit, ce qui ne me gene pas plus que ca, puisque la classe imbriquee peut etre friend...
Ma question etait plutot de savoir quelle etait la norme.
Par contre (a moins d'une erreur de ma part) en Java c'est clair l'acces est authorise...
Marsh Posté le 20-02-2002 à 10:34:39
El_Gringo a écrit a écrit : non, ça c claire ! ms à quoi ça pourrait bien te servir en plus !? |
ben modifier le comportement d'une
instance particuliere d'un objet
comme en java pardi!
LEGREG
Marsh Posté le 20-02-2002 à 11:56:32
legreg a écrit a écrit : ben modifier le comportement d'une instance particuliere d'un objet comme en java pardi! LEGREG |
j'vois pas le rapport avec des instances anonymes !!
Marsh Posté le 20-02-2002 à 12:59:05
ce que j'appelle classe anonyme
c'est le type particuler d'inner classe qui specialise
une classe existante mais sans nommage particulier
C'est particulierement utilise pour tout ce qui
est gestion des evenements dans la librairie Java.
(tu veux juste modifier le comportement d'un bouton,
et tu ne veux pas te taper toute la declaration
et surtout choisir un nom pour une classe qui ne
sera pas reutilise par ailleurs)
A+
LEGREG
Marsh Posté le 20-02-2002 à 13:39:07
legreg a écrit a écrit : ce que j'appelle classe anonyme c'est le type particuler d'inner classe qui specialise une classe existante mais sans nommage particulier C'est particulierement utilise pour tout ce qui est gestion des evenements dans la librairie Java. (tu veux juste modifier le comportement d'un bouton, et tu ne veux pas te taper toute la declaration et surtout choisir un nom pour une classe qui ne sera pas reutilise par ailleurs) A+ LEGREG |
C'est une classe qui est definie au moment de l'appel d'une fonction et a laquelle on ne donne pas de nom.
En C++ tu ne peut pas, mais tu peut definir une classe dans une fonction me semble-t-il...
Marsh Posté le 20-02-2002 à 14:09:19
bon en C++, tu n'as pas de classes
anonymes mais tu as des pointeurs
de fonctions (si c'est une consolation)
j'ai l'impression qu'un grand nombre de
details de C++ sont a la discretion
du compilateur ce qui fait
qu'il est difficile de sortir des sentiers
battus meme en s'en tenant a la norme
ex: interdiction d'avoir des declarations
des fonctions "normales"
a l'interieur d'une autre fonction
mais s'il est possible de declarer une classe
a l'interieur d'une fonction rien n'interdit
a cette classe d'avoir des fonctions membres..
j'aimerai bien savoir si les compilateurs
gerent bien ce genre de cas..
A+
LEGREG
Marsh Posté le 20-02-2002 à 14:53:13
legreg a écrit a écrit : bon en C++, tu n'as pas de classes anonymes mais tu as des pointeurs de fonctions (si c'est une consolation) j'ai l'impression qu'un grand nombre de details de C++ sont a la discretion du compilateur ce qui fait qu'il est difficile de sortir des sentiers battus meme en s'en tenant a la norme ex: interdiction d'avoir des declarations des fonctions "normales" a l'interieur d'une autre fonction mais s'il est possible de declarer une classe a l'interieur d'une fonction rien n'interdit a cette classe d'avoir des fonctions membres.. j'aimerai bien savoir si les compilateurs gerent bien ce genre de cas.. A+ LEGREG |
en tout cas, selon la norme, ils devraient permettre l'utilisation de ces "classes de fonction"
[jfdsdjhfuetppo]--Message édité par El_Gringo--[/jfdsdjhfuetppo]
Marsh Posté le 20-02-2002 à 15:36:43
legreg a écrit a écrit : bon en C++, tu n'as pas de classes anonymes mais tu as des pointeurs de fonctions (si c'est une consolation) j'ai l'impression qu'un grand nombre de details de C++ sont a la discretion du compilateur ce qui fait qu'il est difficile de sortir des sentiers battus meme en s'en tenant a la norme ex: interdiction d'avoir des declarations des fonctions "normales" a l'interieur d'une autre fonction mais s'il est possible de declarer une classe a l'interieur d'une fonction rien n'interdit a cette classe d'avoir des fonctions membres.. j'aimerai bien savoir si les compilateurs gerent bien ce genre de cas.. A+ LEGREG |
ben si tu peut mettre le proto d'une fonction dans une autre, mais pas sa definition.
Je suppose que c'est la meme chose pour une classe de fonction soit le definition des membres se font dans la definition de la classe, soit hors de la fonction, mais bon j'ai ai jamais utilise...
Marsh Posté le 19-02-2002 à 17:32:40
Une classe imbriquee est une classe qui est declaree dans une autre
class A
{
class B
....
Ma question : les elements prives de A sont-ils visible pour B ?
la question est theorique
pour gcc la reponse semble etre oui pour d'autres compilo elle semble etre non. Que dit la norme sur ce point...
[jfdsdjhfuetppo]--Message édité par BENB--[/jfdsdjhfuetppo]