Ok merci,
Mais ... j'aime pas trop (mais j'apprécie ta réponse) ce genre de programmation à la Microsoft
il me semble avoir entendu quelque part un truc du genre, il faut toujours catcher les exceptions sinon c'est une erreur fatal. (Cfr dr watson)
si quelqu'un utilise cette classe, elle doit être au courrant non ?
et que ce passe t'il si une variable de type philo_with_throw est déclarée en dehors de toutes fonctions, en global ?
rem: j'ai jamais aimé la philo car il y avait toujours plus de questions lors d'une réponse ...
-----Original Message-----
From: Pascal Bleser [mailto:pbleser@atos-group.com]
Sent: mardi 25 janvier 2000 12:46
To: linux-team@rtfm.be
Subject: Re: [linux-team] [OUT OF TOPIC][C++] Lacunes en C++
On Tue, Jan 25, 2000 at 12:23:07PM +0100, Michael Stilmant wrote:
> Je refais du C++ après un petit temps et je tombe sur un os.
> J'aimerais créer une classe dont le constructeur initialise une
> variable avec l'appel d'une fonction.
> Mais voilà, je peux tester le retour de cette fonction, et je ne
> sais pas comment je doit réagir si cette fonction retourne une erreur et
> donc que la variable n'est pas initialisée. La variable n'étant pas
> initialisée, l'objet (classe) n'a plus de raison d'être.
Ben, tu jettes une exception évidemment...
...
> variable=fonction_qui_est_dans_une_librairie_pas_a_moi_qui_initialise_de
> s_trucs();
> if (variable==NULL) {
> // pas bonne initialisation
> // qu'est-ce que je fais
tu fais un throw, hein, m'fi ;))
...
> Maintenant je cherche un truc qui permet à la (aux) fonction(s)
> qui crée(nt) un object de type philo que ca c'est mal passé du coté
> constructeur.
>
> du genre
>
> philo *my_philo_variable;
>
> if ((my_philo_variable=new philo)== NULL) {
> // ok c'est ko
> }
// NB: ça fait longtemps, en effet... un nom de classe *doit* commencer
// par une majuscule (a moins de vouloir programmer comme un forain) ;))
#include <String.h>
class PhiloException
{
public:
String cause;
PhiloException(const char* s) : cause(s) {};
};
class Philo
{
private:
Foo* foo;
public:
Philo()
{
foo = fonction_qui_init_foo();
if (!foo) throw(PhiloException("zut! a pas marché"));
}
~Philo()
{
if (foo) fonction_qui_nique_foo();
}
};
Philo* pMyPhilo;
try {
pMyPhilo = new Philo;
} catch (PhiloException e) {
// crotte, a pas marche
cout << "philo is dead, cause: " << e.cause << endl;
};
> Si quelqu'un à quelques idées sur cette question philosophique.
Voilà ;)
--
-o) / Pascal Bleser ATOS Payment Systems|
/\\ \ C++/UNIX Development Aachen, Germany|
_\_v \<guru@linuxbe.org> <pbleser@atos-group.com>|
---------------------------------------------------|
I gave up Smoking, Drinking and Sex. :
It was the most *horrifying* 20 minutes of my life!:
---------------------------------------------------'
---------
Visit the Linux Supertore Online: http://www.redcorp.com !
If you want to be deleted from the list, send a mail to
majordomo@rtfm.be with "unsubscribe linux-team" in the body.
Archive of the list: http://tania.be.linux.org/