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