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

Null objet

12 réponses
Avatar
Phil
Bonjour,
j'ai cr=E9=E9 une classe et je voudrais savoir comment cr=E9er une instance
"null" de cette classe, =E0 laquelle je peux comparer une autre
instance? Par exemple:
MaClass objet1;

if (objet1=3D=3Dnull)
{
...
}
Comment d=E9finir le "null" d'une classe ?
Merci d'avance
Philippe

10 réponses

1 2
Avatar
Mickaël Wolff
Phil wrote:
MaClass objet1;

if (objet1==null)
{
...
}
Comment définir le "null" d'une classe ?



Une idée serait de créer une instance statique qui est à l'état null.
On pourrait alors écrire :
if(object1 == MaClass::null) /*...*/ ;

Une autre serait de créer une template qui te permettrait d'écrire
if(object1 == null<MaClass>) /*...*/ ;

Mais je ne crois pas qu'il existe une méthode permettant d'écrire ce
que tu souhaites initialement.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
Fabien LE LEZ
On Fri, 28 Aug 2009 14:16:50 -0700 (PDT), Phil :

j'ai créé une classe et je voudrais savoir comment créer une instance
"null" de cette classe, à laquelle je peux comparer une autre
instance?



Aucune solution simple. Le mieux est encore de créer une fonction
member "EstNull()" (ou quelque chose d'approchant) qui indique si
l'objet est valide ou pas.

Une autre solution est de passer par un pointeur, ce qui te permettra
d'utiliser le pointeur nul :

if (ptr_objet == 0)
...

Mais sans savoir ce que tu veux faire exactement, c'est difficile de
t'aider.
Avatar
Phil
On 29 août, 01:48, Fabien LE LEZ wrote:
Mais sans savoir ce que tu veux faire exactement, c'est difficile de
t'aider.



Merci pour vos réponses.

Plus en détail:
1) Je crée une classe Class1.

2) Ensuite à l'aide de la classe CList (MFC), je crée une seconde
classe Class1List qui est une liste d'objets de classe Class1:
class Class1List:public CList<Class1, Class1&>
{
public :
Class1 TrouverInstanceClass1(CString nomInstance); // retourne un
objet de classe Class1
}

3) Je veux écrire la méthode TrouverInstanceClass1() de Class1List qui
retourne un pointeur sur une instance Class1 d'après son nom, ou
"null" si aucun objet Class1 n'est trouvé.

Je vais implémenter la solution de Fabien qui consiste à retourner un
pointeur :
class Class1List:public CList<Class1, Class1&>
{
public :
Class1* TrouverInstanceClass1(CString nomInstance);// retourne un
pointeur vers un objet de classe Class1
}

ce qui me permet de retourner NULL si aucun object n'est trouvé.
Merci encore
Philippe
Avatar
Phil
On 29 août, 01:48, Fabien LE LEZ wrote:

Mais sans savoir ce que tu veux faire exactement, c'est difficile de
t'aider.



Merci pour vos réponses.

Plus en détail:
1) Je crée une classe Class1.

2) Ensuite à l'aide de la classe CList (MFC), je crée une seconde
classe Class1List qui est une liste d'objets de classe Class1:
class Class1List:public CList<Class1, Class1&>
{
public :
Class1 TrouverInstanceClass1(CString nomInstance); // retourne un
objet de classe Class1
}

3) Je veux écrire la méthode TrouverInstanceClass1() de Class1List qui
retourne une instance de type Class1 d'après son nom, ou "null" si
aucun objet Class1 n'est trouvé.

Je vais implémenter la solution de Fabien qui consiste à retourner un
pointeur :
class Class1List:public CList<Class1, Class1&>
{
public :
Class1* TrouverInstanceClass1(CString nomInstance);// retourne un
pointeur vers un objet de classe Class1
}

ce qui me permet de retourner NULL si aucun object n'est trouvé.
Merci encore
Philippe
Avatar
Mickaël Wolff
Phil wrote:

ce qui me permet de retourner NULL si aucun object n'est trouvé.



Ben pourquoi tu ne retournes pas 0, simplement ?


--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
Fabien LE LEZ
On Sat, 29 Aug 2009 01:02:45 -0700 (PDT), Phil :

2) Ensuite à l'aide de la classe CList (MFC),



As-tu une très bonne raison d'utiliser CList au lieu de std::list<>
(ou std::vector<>) ?

Les MFC sont mal écrites et obsolètes. La seule chose que Microsoft
ait fait de bien avec, c'est de les abandonner.

3) Je veux écrire la méthode TrouverInstanceClass1() de Class1List qui
retourne une instance de type Class1 d'après son nom, ou "null" si
aucun objet Class1 n'est trouvé.



Effectivement, renvoyer un pointeur nul est probablement la solution
la plus simple.


Une autre solution (ou plutôt, l'encapsulation de la même solution)
est d'utiliser une classe "Faillible" -- tu renvoies un objet qui peut
se convertir en un Class1, mais a aussi une fonction membre
EstValide().

Par exemple :

Faillible<Class1> f= TrouverInstanceClass1();
if (f.EstValide())
{
Faire quelque chose avec f
}
else
{
Pas trouvé !
}


Une troisième solution, utile dans certains cas, est de renvoyer un
Class1, ou lancer une exception si l'objet n'a pas été trouvé.
Avatar
Phil
On 29 août, 13:15, Mickaël Wolff wrote:
Phil wrote:
> ce qui me permet de retourner NULL si aucun object n'est trouvé.

   Ben pourquoi tu ne retournes pas 0, simplement ?

--
Mickaël Wolff aka Lupus Michaelishttp://lupusmic.org



NULL ou 0, c'est équivalent en terme de difficulté de programmation,
et 0 c'est un entier alors que NULL c'est plutôt pour un pointeur,
non ?
Avatar
Phil
On 29 août, 15:05, Fabien LE LEZ wrote:
On Sat, 29 Aug 2009 01:02:45 -0700 (PDT), Phil :

>2) Ensuite à l'aide de la classe CList (MFC),

As-tu une très bonne raison d'utiliser CList au lieu de std::list<>
(ou std::vector<>) ?

Les MFC sont mal écrites et obsolètes. La seule chose que Microsoft
ait fait de bien avec, c'est de les abandonner.



ben j'ai appris le C++ sur le tas (càd en programmant avec les MFC) et
j'ai des lacunes (je savais pas qu'un équivalent de CList existait :)
Avatar
Fabien LE LEZ
On Sat, 29 Aug 2009 06:13:23 -0700 (PDT), Phil :

NULL ou 0, c'est équivalent en terme de difficulté de programmation,
et 0 c'est un entier alors que NULL c'est plutôt pour un pointeur,
non ?



Il y a eu des quantités phénoménales de discussions à ce sujet :
en C++, faut-il écrire "0" ou "NULL" pour le pointeur nul ?

Il n'y a pas vraiment de réponse absolue. Personnellement, je préfère
écrire "0" ; quant à toi, choisis un des deux et tiens-t-y. Mais sois
préparé à lire les deux.
Avatar
Fabien LE LEZ
On Sat, 29 Aug 2009 06:15:25 -0700 (PDT), Phil :

ben j'ai appris le C++ sur le tas



Moi aussi. Ça m'a fait perdre au moins cinq ans.

Je t'encourage vivement à lire "Accelerated C++" de Koenig et Moo ; ce
très bon bouquin t'aidera à (re)partir du bon pied. Mon principal
regret est de ne pas l'avoir lu dès le début. (D'un autre côté, il est
arrivé un peu tard pour moi...)
1 2