Salut,
Toute définition de type à l'intérieur d'une classe n'a un effet que strictement similaire à ce qui se passe quand on défini un type dans un espace de nommage...
Cela signifie que tu dois indiquer la portée, mais tu garde tout à fait l'acces à ce type:
Par exemple:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
namespace MonEspace
{
class MaClass
{
public:
MaClass(){}
/*...*/
};
enum lenum
{
lavaleur1,
lavaleur2 /*,
... */
};
}; |
Si tu as la déclaration comme ci-dessus (et, bien sur, l'implémentation qui va avec
, en dehors de toute directive d'utilisation d'espace de nommage (using namespace...), tu devra instancier un objet sous la forme de
MonEspace::MaClass objet;
Si tu déclare un type - quel qu'il soit (énum, class...) - en l'imbriquant dans une classe, tu devra tout simplement indiquer la portée de la meme manière, à savoir qu'avec une classe du genre de
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class LaClasseSommet
{
class LaClasseImbriquee
{
public:
LaClasseImbriquee(){}
/*...*/
};
enum lenumimbriquee
{
val1,
val2 /* ,
... */
}
public:
LaClasseSommet(){}
void LaFonction();
/*...*/
} |
Au sein de la classe, la portée est... celle de la classe, ce qui fait que LaFonction sera implémentée sous la forme de
1 2 3 4 5 6 7
| void LaClasseSommet::LaClasseSommet
{
/* on a directement acces à l'énumération */
lenumimbriquee ee=val1;
/* tout comme à la classe imbriquée */
LaClassImbriquee objet;
} |
mais, par contre, dans une fonction qui n'est pas déjà dans la portée de LaClasseSommet, l'acces est là, mais la portée doit etre indiquée.
1 2
| LaClasseSommet::LaClasseImbriquee lobjet;
LaClasseSommet::lenumimbrique lava=LaClasseSommet::val1; |
L'avantage étant, tout comme l'utilisation d'un espace de nommage, que tu "limite" l'acces au type imbriqué à la portée... ce qui fait que tant le nom de la classe ou de l'énumération ou le terme représentant la valeur énumérée pourra être réutilisé (dans une autre classe ou un autre espace de nommage)
Partager