Null objet

Le
Phil
Bonjour,
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? Par exemple:
MaClass objet1;

if (objet1==null)
{

}
Comment définir le "null" d'une classe ?
Merci d'avance
Philippe
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mickaël Wolff
Le #20009371
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
Fabien LE LEZ
Le #20009641
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.
Phil
Le #20010641
On 29 août, 01:48, Fabien LE LEZ
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
Phil
Le #20010631
On 29 août, 01:48, Fabien LE LEZ
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
Mickaël Wolff
Le #20011691
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
Fabien LE LEZ
Le #20012391
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é.
Phil
Le #20012521
On 29 août, 13:15, 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 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 ?
Phil
Le #20012511
On 29 août, 15:05, 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.



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 :)
Fabien LE LEZ
Le #20013471
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.
Fabien LE LEZ
Le #20013461
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...)
Publicité
Poster une réponse
Anonyme