J'ai un p'tit probleme de destructeur. Je voudrai creer une classe
virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont
abstraites (virtual = 0) et qui n'a pas d'attributs.
ma classe I_A est instanciee par:
I_A* myClass = new A();
cependant, j'ai un probleme pour le destructeur. quand je fais:
delete myClass;
je ne passe pas dans le corp de ~A()
Si je passe ~A() en virtuel ca ne change rien.
Si je declare un constructeur absatrait a I_A:
virtual ~I_A() = 0;
je linker me dis qu'il ne trouve pas la definition de ~I_A et ne peut
proceder.
Avez vous une idee de comment resoudre mon problem?
J'ai vaguement entendu parler de classes virtuelles (virtual class???)
ou d'heritage virtuel: est-ce la reponse a mon probleme?????
J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
ma classe I_A est instanciee par: I_A* myClass = new A();
cependant, j'ai un probleme pour le destructeur. quand je fais: delete myClass;
je ne passe pas dans le corp de ~A()
C'est encore pire que ça : Tu pourrais avoir un plantage complet de ton programme.
Si je passe ~A() en virtuel ca ne change rien. Normal
Si je declare un constructeur absatrait a I_A: Destructeur, voulais tu dire.
virtual ~I_A() = 0; je linker me dis qu'il ne trouve pas la definition de ~I_A et ne peut proceder.
Normal, tu n'a pas défini cette fonction. Un destructeur virtuel doit toujours être défini, puisqu'il sera automatiquement appelé par les destructeurs des classes dérivées.
Avez vous une idee de comment resoudre mon problem?
Oui, défini ce destructeur : virtual ~I_A() {} Tu peux même le déclarer =0 et le définir quand même, mais dans ce cas, je considèrerais ça comme de l'obfuscation.
J'ai vaguement entendu parler de classes virtuelles (virtual class???) ou d'heritage virtuel: est-ce la reponse a mon probleme?????
Non, l'héritage virtuel est en rapport avec l'héritage multiple.
-- Loïc
Philippe Mesmeur wrote:
Hello,
J'ai un p'tit probleme de destructeur. Je voudrai creer une classe
virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont
abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond
plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une
mauvaise idée en C++.
ma classe I_A est instanciee par:
I_A* myClass = new A();
cependant, j'ai un probleme pour le destructeur. quand je fais:
delete myClass;
je ne passe pas dans le corp de ~A()
C'est encore pire que ça : Tu pourrais avoir un plantage complet de ton
programme.
Si je passe ~A() en virtuel ca ne change rien.
Normal
Si je declare un constructeur absatrait a I_A:
Destructeur, voulais tu dire.
virtual ~I_A() = 0;
je linker me dis qu'il ne trouve pas la definition de ~I_A et ne peut
proceder.
Normal, tu n'a pas défini cette fonction. Un destructeur virtuel doit
toujours être défini, puisqu'il sera automatiquement appelé par les
destructeurs des classes dérivées.
Avez vous une idee de comment resoudre mon problem?
Oui, défini ce destructeur : virtual ~I_A() {}
Tu peux même le déclarer =0 et le définir quand même, mais dans ce cas,
je considèrerais ça comme de l'obfuscation.
J'ai vaguement entendu parler de classes virtuelles (virtual class???)
ou d'heritage virtuel: est-ce la reponse a mon probleme?????
Non, l'héritage virtuel est en rapport avec l'héritage multiple.
J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
ma classe I_A est instanciee par: I_A* myClass = new A();
cependant, j'ai un probleme pour le destructeur. quand je fais: delete myClass;
je ne passe pas dans le corp de ~A()
C'est encore pire que ça : Tu pourrais avoir un plantage complet de ton programme.
Si je passe ~A() en virtuel ca ne change rien. Normal
Si je declare un constructeur absatrait a I_A: Destructeur, voulais tu dire.
virtual ~I_A() = 0; je linker me dis qu'il ne trouve pas la definition de ~I_A et ne peut proceder.
Normal, tu n'a pas défini cette fonction. Un destructeur virtuel doit toujours être défini, puisqu'il sera automatiquement appelé par les destructeurs des classes dérivées.
Avez vous une idee de comment resoudre mon problem?
Oui, défini ce destructeur : virtual ~I_A() {} Tu peux même le déclarer =0 et le définir quand même, mais dans ce cas, je considèrerais ça comme de l'obfuscation.
J'ai vaguement entendu parler de classes virtuelles (virtual class???) ou d'heritage virtuel: est-ce la reponse a mon probleme?????
Non, l'héritage virtuel est en rapport avec l'héritage multiple.
-- Loïc
Jean-Marc Bourguet
Philippe Mesmeur writes:
J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
methode est un mot a eviter en C++, car ambigu (signifiant au choix fonction membre ou fonction membre virtuelle)
En regle generale, toute classe ayant des fonctions virtuelles doit avoir son destructeur virtuel. (Ce n'est reellement necessaire que si on detruit jamais qu'a partir d'un pointeur vers les classes les plus derivees ce qui peut arriver par conception, auquel cas l'info est utilisable, ou par chance, auquel cas il vaut mieux ne pas profiter de la chose).
ma classe I_A est instanciee par: I_A* myClass = new A();
cependant, j'ai un probleme pour le destructeur. quand je fais: delete myClass;
je ne passe pas dans le corp de ~A()
Tu as de la chance, il pourrait arriver a peu pres n'importe quoi.
Si je passe ~A() en virtuel ca ne change rien.
C'est le destructeur de I_A qui doit etre virtuel.
Si je declare un constructeur absatrait a I_A: virtual ~I_A() = 0; je linker me dis qu'il ne trouve pas la definition de ~I_A et ne peut proceder.
Toute fonction virtuelle pure peut etre definie. Le destructeur doit etre definit. Par exemple de maniere inline, ce qu'il n'est pas possible de faire dans la classe donc
inline I_A::~I_A() { }
Avez vous une idee de comment resoudre mon problem? J'ai vaguement entendu parler de classes virtuelles (virtual class???) ou d'heritage virtuel: est-ce la reponse a mon probleme?????
C'est la reponse a un autre probleme qui n'a lieu qu'avec de l'heritage multiple (comment eviter qu'on herite plusieurs fois de la meme classe de base), mais la description (aucun membre donnee) et le nom (commencant par I_ pour interface je suppose) de ta classe laisse a penser que heriter de I_A devrait etre fait de maniere virtuelle si de l'heritage multiple se fait quelque par avec cette classe comme classe de base.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Philippe Mesmeur <pmes@ocegr.fr> writes:
J'ai un p'tit probleme de destructeur. Je voudrai creer une
classe virtuelle pure, c'est a dire une classe dont TOUTES les
methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
methode est un mot a eviter en C++, car ambigu (signifiant au choix
fonction membre ou fonction membre virtuelle)
En regle generale, toute classe ayant des fonctions virtuelles doit
avoir son destructeur virtuel. (Ce n'est reellement necessaire que si
on detruit jamais qu'a partir d'un pointeur vers les classes les plus
derivees ce qui peut arriver par conception, auquel cas l'info est
utilisable, ou par chance, auquel cas il vaut mieux ne pas profiter de
la chose).
ma classe I_A est instanciee par:
I_A* myClass = new A();
cependant, j'ai un probleme pour le destructeur. quand je fais:
delete myClass;
je ne passe pas dans le corp de ~A()
Tu as de la chance, il pourrait arriver a peu pres n'importe quoi.
Si je passe ~A() en virtuel ca ne change rien.
C'est le destructeur de I_A qui doit etre virtuel.
Si je declare un constructeur absatrait a I_A:
virtual ~I_A() = 0;
je linker me dis qu'il ne trouve pas la definition de ~I_A et ne peut
proceder.
Toute fonction virtuelle pure peut etre definie. Le destructeur doit
etre definit. Par exemple de maniere inline, ce qu'il n'est pas
possible de faire dans la classe donc
inline I_A::~I_A()
{
}
Avez vous une idee de comment resoudre mon problem?
J'ai vaguement entendu parler de classes virtuelles (virtual class???) ou
d'heritage virtuel: est-ce la reponse a mon probleme?????
C'est la reponse a un autre probleme qui n'a lieu qu'avec de
l'heritage multiple (comment eviter qu'on herite plusieurs fois de la
meme classe de base), mais la description (aucun membre donnee) et le
nom (commencant par I_ pour interface je suppose) de ta classe laisse
a penser que heriter de I_A devrait etre fait de maniere virtuelle si
de l'heritage multiple se fait quelque par avec cette classe comme
classe de base.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
methode est un mot a eviter en C++, car ambigu (signifiant au choix fonction membre ou fonction membre virtuelle)
En regle generale, toute classe ayant des fonctions virtuelles doit avoir son destructeur virtuel. (Ce n'est reellement necessaire que si on detruit jamais qu'a partir d'un pointeur vers les classes les plus derivees ce qui peut arriver par conception, auquel cas l'info est utilisable, ou par chance, auquel cas il vaut mieux ne pas profiter de la chose).
ma classe I_A est instanciee par: I_A* myClass = new A();
cependant, j'ai un probleme pour le destructeur. quand je fais: delete myClass;
je ne passe pas dans le corp de ~A()
Tu as de la chance, il pourrait arriver a peu pres n'importe quoi.
Si je passe ~A() en virtuel ca ne change rien.
C'est le destructeur de I_A qui doit etre virtuel.
Si je declare un constructeur absatrait a I_A: virtual ~I_A() = 0; je linker me dis qu'il ne trouve pas la definition de ~I_A et ne peut proceder.
Toute fonction virtuelle pure peut etre definie. Le destructeur doit etre definit. Par exemple de maniere inline, ce qu'il n'est pas possible de faire dans la classe donc
inline I_A::~I_A() { }
Avez vous une idee de comment resoudre mon problem? J'ai vaguement entendu parler de classes virtuelles (virtual class???) ou d'heritage virtuel: est-ce la reponse a mon probleme?????
C'est la reponse a un autre probleme qui n'a lieu qu'avec de l'heritage multiple (comment eviter qu'on herite plusieurs fois de la meme classe de base), mais la description (aucun membre donnee) et le nom (commencant par I_ pour interface je suppose) de ta classe laisse a penser que heriter de I_A devrait etre fait de maniere virtuelle si de l'heritage multiple se fait quelque par avec cette classe comme classe de base.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Marc Bourguet
Loïc Joly writes:
Philippe Mesmeur wrote:
Hello, J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
Philippe Mesmeur wrote:
Hello,
J'ai un p'tit probleme de destructeur. Je voudrai creer une classe
virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont
abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca
correspond plus à ce que JAVA appèlle une intrface, et qui est
souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Hello, J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Philippe Mesmeur
Merci de m'avoir repondu si rapidement :-)
Je suis tout a fait d'accord avec toi quand tu parles d'interface. C'est meme ma signification que je donne au "I" de ma classe "I_A" ;-)
Pour moi, une interface est une definition mais pas une implementation. C'est pour ca que je veux faire en sorte que ma classe I_A ai toutes ces methodes abstraite, i.e. virtual = 0.
Ainsi, je voudrai faire en sorte qu'il n'y ai pas de code pour I_A::~I_A(); D'apres ce que je comprend de ta reponse, tu me dis que je suis quand meme oblige de le faire, meme si c'est du code vide, style:
I_A::~I_A() {}
C'est bien ca?
Encore merci
Loïc Joly wrote:
Philippe Mesmeur wrote:
Hello,
J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
ma classe I_A est instanciee par: I_A* myClass = new A();
cependant, j'ai un probleme pour le destructeur. quand je fais: delete myClass;
je ne passe pas dans le corp de ~A()
C'est encore pire que ça : Tu pourrais avoir un plantage complet de ton programme.
Si je passe ~A() en virtuel ca ne change rien.
Normal
Si je declare un constructeur absatrait a I_A:
Destructeur, voulais tu dire.
virtual ~I_A() = 0; je linker me dis qu'il ne trouve pas la definition de ~I_A et ne peut proceder.
Normal, tu n'a pas défini cette fonction. Un destructeur virtuel doit toujours être défini, puisqu'il sera automatiquement appelé par les destructeurs des classes dérivées.
Avez vous une idee de comment resoudre mon problem?
Oui, défini ce destructeur : virtual ~I_A() {} Tu peux même le déclarer =0 et le définir quand même, mais dans ce cas, je considèrerais ça comme de l'obfuscation.
J'ai vaguement entendu parler de classes virtuelles (virtual class???) ou d'heritage virtuel: est-ce la reponse a mon probleme?????
Non, l'héritage virtuel est en rapport avec l'héritage multiple.
Merci de m'avoir repondu si rapidement :-)
Je suis tout a fait d'accord avec toi quand tu parles d'interface.
C'est meme ma signification que je donne au "I" de ma classe "I_A" ;-)
Pour moi, une interface est une definition mais pas une
implementation. C'est pour ca que je veux faire en sorte que ma classe
I_A ai toutes ces methodes abstraite, i.e. virtual = 0.
Ainsi, je voudrai faire en sorte qu'il n'y ai pas de code pour
I_A::~I_A(); D'apres ce que je comprend de ta reponse, tu me dis que je
suis quand meme oblige de le faire, meme si c'est du code vide, style:
I_A::~I_A()
{}
C'est bien ca?
Encore merci
Loïc Joly wrote:
Philippe Mesmeur wrote:
Hello,
J'ai un p'tit probleme de destructeur. Je voudrai creer une classe
virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont
abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond
plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une
mauvaise idée en C++.
ma classe I_A est instanciee par:
I_A* myClass = new A();
cependant, j'ai un probleme pour le destructeur. quand je fais:
delete myClass;
je ne passe pas dans le corp de ~A()
C'est encore pire que ça : Tu pourrais avoir un plantage complet de ton
programme.
Si je passe ~A() en virtuel ca ne change rien.
Normal
Si je declare un constructeur absatrait a I_A:
Destructeur, voulais tu dire.
virtual ~I_A() = 0;
je linker me dis qu'il ne trouve pas la definition de ~I_A et ne peut
proceder.
Normal, tu n'a pas défini cette fonction. Un destructeur virtuel doit
toujours être défini, puisqu'il sera automatiquement appelé par les
destructeurs des classes dérivées.
Avez vous une idee de comment resoudre mon problem?
Oui, défini ce destructeur : virtual ~I_A() {}
Tu peux même le déclarer =0 et le définir quand même, mais dans ce cas,
je considèrerais ça comme de l'obfuscation.
J'ai vaguement entendu parler de classes virtuelles (virtual class???)
ou d'heritage virtuel: est-ce la reponse a mon probleme?????
Non, l'héritage virtuel est en rapport avec l'héritage multiple.
Je suis tout a fait d'accord avec toi quand tu parles d'interface. C'est meme ma signification que je donne au "I" de ma classe "I_A" ;-)
Pour moi, une interface est une definition mais pas une implementation. C'est pour ca que je veux faire en sorte que ma classe I_A ai toutes ces methodes abstraite, i.e. virtual = 0.
Ainsi, je voudrai faire en sorte qu'il n'y ai pas de code pour I_A::~I_A(); D'apres ce que je comprend de ta reponse, tu me dis que je suis quand meme oblige de le faire, meme si c'est du code vide, style:
I_A::~I_A() {}
C'est bien ca?
Encore merci
Loïc Joly wrote:
Philippe Mesmeur wrote:
Hello,
J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
ma classe I_A est instanciee par: I_A* myClass = new A();
cependant, j'ai un probleme pour le destructeur. quand je fais: delete myClass;
je ne passe pas dans le corp de ~A()
C'est encore pire que ça : Tu pourrais avoir un plantage complet de ton programme.
Si je passe ~A() en virtuel ca ne change rien.
Normal
Si je declare un constructeur absatrait a I_A:
Destructeur, voulais tu dire.
virtual ~I_A() = 0; je linker me dis qu'il ne trouve pas la definition de ~I_A et ne peut proceder.
Normal, tu n'a pas défini cette fonction. Un destructeur virtuel doit toujours être défini, puisqu'il sera automatiquement appelé par les destructeurs des classes dérivées.
Avez vous une idee de comment resoudre mon problem?
Oui, défini ce destructeur : virtual ~I_A() {} Tu peux même le déclarer =0 et le définir quand même, mais dans ce cas, je considèrerais ça comme de l'obfuscation.
J'ai vaguement entendu parler de classes virtuelles (virtual class???) ou d'heritage virtuel: est-ce la reponse a mon probleme?????
Non, l'héritage virtuel est en rapport avec l'héritage multiple.
Michel Michaud
Dans news:, Philippe Mesmeur
Pour moi, une interface est une definition mais pas une
Définition ou plutôt déclaration ?
implementation. C'est pour ca que je veux faire en sorte que ma classe I_A ai toutes ces methodes abstraite, i.e. virtual = 0.
Pourquoi ?
Ainsi, je voudrai faire en sorte qu'il n'y ai pas de code pour I_A::~I_A(); D'apres ce que je comprend de ta reponse, tu me dis
Pourquoi c'est important qu'il n'y ait pas de code ? Ça me paraît une drôle de contrainte...
que je suis quand meme oblige de le faire, meme si c'est du code vide, style:
I_A::~I_A() {}
C'est bien ca?
Oui. Mais encore une fois, pourquoi veux-tu forcer ceux qui hériteront à définir un constructeur (c'est ce qui arrivera si tu le déclares avec = 0, même si tu fournis la fonction vide) ? Comment sais-tu qu'il y aura un besoin d'y mettre quelque chose dans les classes dérivées ?
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Dans news:4002C4A9.4050802@ocegr.fr, Philippe Mesmeur <pmes@ocegr.fr>
Pour moi, une interface est une definition mais pas une
Définition ou plutôt déclaration ?
implementation. C'est pour ca que je veux faire en sorte que ma
classe I_A ai toutes ces methodes abstraite, i.e. virtual = 0.
Pourquoi ?
Ainsi, je voudrai faire en sorte qu'il n'y ai pas de code pour
I_A::~I_A(); D'apres ce que je comprend de ta reponse, tu me dis
Pourquoi c'est important qu'il n'y ait pas de code ? Ça me paraît
une drôle de contrainte...
que je suis quand meme oblige de le faire, meme si c'est du code
vide, style:
I_A::~I_A()
{}
C'est bien ca?
Oui. Mais encore une fois, pourquoi veux-tu forcer ceux qui
hériteront à définir un constructeur (c'est ce qui arrivera si
tu le déclares avec = 0, même si tu fournis la fonction vide) ?
Comment sais-tu qu'il y aura un besoin d'y mettre quelque
chose dans les classes dérivées ?
--
Michel Michaud mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Pour moi, une interface est une definition mais pas une
Définition ou plutôt déclaration ?
implementation. C'est pour ca que je veux faire en sorte que ma classe I_A ai toutes ces methodes abstraite, i.e. virtual = 0.
Pourquoi ?
Ainsi, je voudrai faire en sorte qu'il n'y ai pas de code pour I_A::~I_A(); D'apres ce que je comprend de ta reponse, tu me dis
Pourquoi c'est important qu'il n'y ait pas de code ? Ça me paraît une drôle de contrainte...
que je suis quand meme oblige de le faire, meme si c'est du code vide, style:
I_A::~I_A() {}
C'est bien ca?
Oui. Mais encore une fois, pourquoi veux-tu forcer ceux qui hériteront à définir un constructeur (c'est ce qui arrivera si tu le déclares avec = 0, même si tu fournis la fonction vide) ? Comment sais-tu qu'il y aura un besoin d'y mettre quelque chose dans les classes dérivées ?
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Christophe Lephay
Jean-Marc Bourguet wrote:
Loïc Joly writes:
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en C++ on peut faire autrement ?
Chris
Jean-Marc Bourguet wrote:
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
Ce n'est pas la définition d'une classe virtuelle pure. Ca
correspond plus à ce que JAVA appèlle une intrface, et qui est
souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en C++ on peut faire autrement ?
Chris
Vincent Richard
Jean-Marc Bourguet wrote:
Loïc Joly writes:
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en C++ on peut faire autrement ?
Je suis curieux de découvrir les alternatives (si ça se trouve, je les connais peut-être déjà, mais ça ne me saute pas aux yeux dans ce cas précis...).
Merci d'avance.
Vincent
-- vmime, une bibliothèque C++ sous licence GPL pour parser et générer des messages au format MIME : http://www.sourceforge.net/projects/vmime/
Jean-Marc Bourguet wrote:
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
Ce n'est pas la définition d'une classe virtuelle pure. Ca
correspond plus à ce que JAVA appèlle une intrface, et qui est
souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en C++ on peut faire autrement ?
Je suis curieux de découvrir les alternatives (si ça se trouve, je les
connais peut-être déjà, mais ça ne me saute pas aux yeux dans ce cas
précis...).
Merci d'avance.
Vincent
--
vmime, une bibliothèque C++ sous licence GPL pour parser et générer
des messages au format MIME : http://www.sourceforge.net/projects/vmime/
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en C++ on peut faire autrement ?
Je suis curieux de découvrir les alternatives (si ça se trouve, je les connais peut-être déjà, mais ça ne me saute pas aux yeux dans ce cas précis...).
Merci d'avance.
Vincent
-- vmime, une bibliothèque C++ sous licence GPL pour parser et générer des messages au format MIME : http://www.sourceforge.net/projects/vmime/
Loïc Joly
Jean-Marc Bourguet wrote:
Loïc Joly writes:
Philippe Mesmeur wrote:
Hello, J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en JAVA, comme on n'a qu'une version limitée à ce que JAVA appelle interface de l'héritage multiple, on ne peut souvent pas faire autrement.
En C++, on peut dans la classe de base vérifier les pré/post-conditions, alors pourquoi s'en priver !
-- Loïc
Jean-Marc Bourguet wrote:
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
Philippe Mesmeur wrote:
Hello,
J'ai un p'tit probleme de destructeur. Je voudrai creer une classe
virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont
abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca
correspond plus à ce que JAVA appèlle une intrface, et qui est
souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en JAVA, comme on n'a qu'une version limitée à ce que JAVA
appelle interface de l'héritage multiple, on ne peut souvent pas faire
autrement.
En C++, on peut dans la classe de base vérifier les pré/post-conditions,
alors pourquoi s'en priver !
Hello, J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en JAVA, comme on n'a qu'une version limitée à ce que JAVA appelle interface de l'héritage multiple, on ne peut souvent pas faire autrement.
En C++, on peut dans la classe de base vérifier les pré/post-conditions, alors pourquoi s'en priver !
-- Loïc
Jean-Marc Bourguet
"Christophe Lephay" writes:
Jean-Marc Bourguet wrote:
Loïc Joly writes:
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en C++ on peut faire autrement ?
Qu'est-ce qu'on peut faire autrement? (Je ne sais pas pour quoi c'est utilise en Java... et l'exemple qui a commence la discussion est suffisemment peu explicite sur ses intentions pour que je n'arrive pas a donner un avis sur l'oportunite d'utiliser cette technique).
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Ce n'est pas la définition d'une classe virtuelle pure. Ca
correspond plus à ce que JAVA appèlle une intrface, et qui est
souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en C++ on peut faire autrement ?
Qu'est-ce qu'on peut faire autrement? (Je ne sais pas pour quoi c'est
utilise en Java... et l'exemple qui a commence la discussion est
suffisemment peu explicite sur ses intentions pour que je n'arrive pas
a donner un avis sur l'oportunite d'utiliser cette technique).
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en C++ on peut faire autrement ?
Qu'est-ce qu'on peut faire autrement? (Je ne sais pas pour quoi c'est utilise en Java... et l'exemple qui a commence la discussion est suffisemment peu explicite sur ses intentions pour que je n'arrive pas a donner un avis sur l'oportunite d'utiliser cette technique).
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Marc Bourguet
Loïc Joly writes:
Jean-Marc Bourguet wrote:
Loïc Joly writes:
Philippe Mesmeur wrote:
Hello, J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++. Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en JAVA, comme on n'a qu'une version limitée à ce que JAVA appelle interface de l'héritage multiple, on ne peut souvent pas faire autrement.
En C++, on peut dans la classe de base vérifier les pré/post-conditions, alors pourquoi s'en priver !
Si c'est simplement a cause du manque de membre non virtuel en Java, ce n'est pas quelque chose qui me semble fondamentalement different. Ce que je jugerais fondamentalement different, c'est l'utilisation de membres donnees.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
Jean-Marc Bourguet wrote:
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
Philippe Mesmeur wrote:
Hello,
J'ai un p'tit probleme de destructeur. Je voudrai creer une classe
virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont
abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca
correspond plus à ce que JAVA appèlle une intrface, et qui est
souvent AMA une mauvaise idée en C++.
Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en JAVA, comme on n'a qu'une version limitée à ce que JAVA appelle
interface de l'héritage multiple, on ne peut souvent pas faire autrement.
En C++, on peut dans la classe de base vérifier les pré/post-conditions,
alors pourquoi s'en priver !
Si c'est simplement a cause du manque de membre non virtuel en Java,
ce n'est pas quelque chose qui me semble fondamentalement different.
Ce que je jugerais fondamentalement different, c'est l'utilisation de
membres donnees.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Hello, J'ai un p'tit probleme de destructeur. Je voudrai creer une classe virtuelle pure, c'est a dire une classe dont TOUTES les methodes sont abstraites (virtual = 0) et qui n'a pas d'attributs.
Ce n'est pas la définition d'une classe virtuelle pure. Ca correspond plus à ce que JAVA appèlle une intrface, et qui est souvent AMA une mauvaise idée en C++. Pourquoi serait-ce une plus mauvaise idee en C++ qu'en Java?
Parce qu'en JAVA, comme on n'a qu'une version limitée à ce que JAVA appelle interface de l'héritage multiple, on ne peut souvent pas faire autrement.
En C++, on peut dans la classe de base vérifier les pré/post-conditions, alors pourquoi s'en priver !
Si c'est simplement a cause du manque de membre non virtuel en Java, ce n'est pas quelque chose qui me semble fondamentalement different. Ce que je jugerais fondamentalement different, c'est l'utilisation de membres donnees.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org