class Circle : public Shape {
public:
void within() { cout << "hello"; }
};
class ArenaObject {
public:
virtual ~ArenaObject () {};
};
class MovingObject : public Circle, public ArenaObject {};
int main() {
ArenaObject* r1 = new MovingObject;
((Shape*)r1) -> within();
};
Comment faire pour que r1 (qui dérive à la fois de ArenaObject et de
Shape<|-Circle ) puisse appeler within() de Circle.
Le code précedent génére un SegFault (gcc).
Je ne veux bien sûr pas déclarer r1 comme Shape* puisqu'il est stocké
dans une liste de ArenaObject...
--
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/
-- 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
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 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
class Circle : public Shape { public: void within() { cout << "hello"; } };
class ArenaObject { public: virtual ~ArenaObject () {}; };
class MovingObject : public Circle, public ArenaObject {};
int main() { ArenaObject* r1 = new MovingObject;
((Shape*)r1) -> within();
dynamic_cast<Shape*>(r1)->within(); Hmmm, il me semblait pourtant l'avoir testé aussi... Peut être que
l'erreur vennait d'ailleur à ce moment là...
Au fait, je ne comprends pas trop bien le reinterpret_cast...
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
class Circle : public Shape {
public:
void within() { cout << "hello"; }
};
class ArenaObject {
public:
virtual ~ArenaObject () {};
};
class MovingObject : public Circle, public ArenaObject {};
int main() {
ArenaObject* r1 = new MovingObject;
((Shape*)r1) -> within();
dynamic_cast<Shape*>(r1)->within();
Hmmm, il me semblait pourtant l'avoir testé aussi... Peut être que
l'erreur vennait d'ailleur à ce moment là...
Au fait, je ne comprends pas trop bien le reinterpret_cast...
--
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/
class Circle : public Shape { public: void within() { cout << "hello"; } };
class ArenaObject { public: virtual ~ArenaObject () {}; };
class MovingObject : public Circle, public ArenaObject {};
int main() { ArenaObject* r1 = new MovingObject;
((Shape*)r1) -> within();
dynamic_cast<Shape*>(r1)->within(); Hmmm, il me semblait pourtant l'avoir testé aussi... Peut être que
l'erreur vennait d'ailleur à ce moment là...
Au fait, je ne comprends pas trop bien le reinterpret_cast...
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
Thomas Parle
"Benoit Rousseau" a écrit dans le message de news: 3fcc9b2b$0$3239$
Jean-Marc Bourguet wrote:
Benoit Rousseau writes:
int main() { ArenaObject* r1 = new MovingObject;
((Shape*)r1) -> within();
dynamic_cast<Shape*>(r1)->within(); Hmmm, il me semblait pourtant l'avoir testé aussi... Peut être que
l'erreur vennait d'ailleur à ce moment là...
Au fait, je ne comprends pas trop bien le reinterpret_cast...
Ou ça un reinterpret_cast ? Sinon, je pencherais plutôt pour un pb de conception : stocker ton objet en tant que ArenaObject sous entend qu'il ne sera considéré qu'à travers les fonctionnalités de base de la classe ArenaObject. Rien n'assure que ton objet ne soit aussi un Shape*. Mais sans en savoir plus sur le code en question, je ne peux vraiment avoir d'avis pertinent sur la question, je veux juste donner moin point de vue d'après ce que j'en voit. Bon courage
"Benoit Rousseau" <not.provided@no.spam> a écrit dans le message de news:
3fcc9b2b$0$3239$ba620e4c@reader0.news.skynet.be...
Jean-Marc Bourguet wrote:
Benoit Rousseau <not.provided@no.spam> writes:
int main() {
ArenaObject* r1 = new MovingObject;
((Shape*)r1) -> within();
dynamic_cast<Shape*>(r1)->within();
Hmmm, il me semblait pourtant l'avoir testé aussi... Peut être que
l'erreur vennait d'ailleur à ce moment là...
Au fait, je ne comprends pas trop bien le reinterpret_cast...
Ou ça un reinterpret_cast ?
Sinon, je pencherais plutôt pour un pb de conception : stocker ton objet en
tant que ArenaObject sous entend qu'il ne sera considéré qu'à travers les
fonctionnalités de base de la classe ArenaObject. Rien n'assure que ton
objet ne soit aussi un Shape*. Mais sans en savoir plus sur le code en
question, je ne peux vraiment avoir d'avis pertinent sur la question, je
veux juste donner moin point de vue d'après ce que j'en voit.
Bon courage
"Benoit Rousseau" a écrit dans le message de news: 3fcc9b2b$0$3239$
Jean-Marc Bourguet wrote:
Benoit Rousseau writes:
int main() { ArenaObject* r1 = new MovingObject;
((Shape*)r1) -> within();
dynamic_cast<Shape*>(r1)->within(); Hmmm, il me semblait pourtant l'avoir testé aussi... Peut être que
l'erreur vennait d'ailleur à ce moment là...
Au fait, je ne comprends pas trop bien le reinterpret_cast...
Ou ça un reinterpret_cast ? Sinon, je pencherais plutôt pour un pb de conception : stocker ton objet en tant que ArenaObject sous entend qu'il ne sera considéré qu'à travers les fonctionnalités de base de la classe ArenaObject. Rien n'assure que ton objet ne soit aussi un Shape*. Mais sans en savoir plus sur le code en question, je ne peux vraiment avoir d'avis pertinent sur la question, je veux juste donner moin point de vue d'après ce que j'en voit. Bon courage
Benoit Rousseau
Thomas Parle wrote:
"Benoit Rousseau" a écrit dans le message de news: 3fcc9b2b$0$3239$
Jean-Marc Bourguet wrote:
Benoit Rousseau writes:
int main() { ArenaObject* r1 = new MovingObject;
((Shape*)r1) -> within();
dynamic_cast<Shape*>(r1)->within();
Hmmm, il me semblait pourtant l'avoir testé aussi... Peut être que l'erreur vennait d'ailleur à ce moment là...
Au fait, je ne comprends pas trop bien le reinterpret_cast...
Ou ça un reinterpret_cast ? Null part... Juste pour savoir.
Sinon, je pencherais plutôt pour un pb de conception : stocker ton objet en tant que ArenaObject sous entend qu'il ne sera considéré qu'à travers les fonctionnalités de base de la classe ArenaObject. Rien n'assure que ton objet ne soit aussi un Shape*. Mais sans en savoir plus sur le code en question, je ne peux vraiment avoir d'avis pertinent sur la question, je veux juste donner moin point de vue d'après ce que j'en voit. Bon courage
En fait j'ai modifier ce design à cause d'objets tels que les murs. J'hésitais (et hésite toujours).
La solution précédente était de dériver Circle, Line et InnerCircle de Shape, puis WallCircle, WallLine et InnerCircle de chacune de ces trois classes. De Circle dérivait tous les autres objets d'une arène.
Le problème vient du fait que pour redéfinir un mur, il faut modifier les 3 classes, et pour faire des murs configurables, ça devient impossible.
J'ai donc pensé à ajouter une autre classe de base ArenaObject. D'elle viennent les définitions suivantes : class Wall : ArenaObject; class WallCircle : Wall, Circle; class MovingObject : ArenaObject, Circle class Robot : MovingObject
Est ce qu'une composition te semble plus appropriée ? class ArenaObject { protected: Shape* my_shape; }; ?
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
Thomas Parle wrote:
"Benoit Rousseau" <not.provided@no.spam> a écrit dans le message de news:
3fcc9b2b$0$3239$ba620e4c@reader0.news.skynet.be...
Jean-Marc Bourguet wrote:
Benoit Rousseau <not.provided@no.spam> writes:
int main() {
ArenaObject* r1 = new MovingObject;
((Shape*)r1) -> within();
dynamic_cast<Shape*>(r1)->within();
Hmmm, il me semblait pourtant l'avoir testé aussi... Peut être que
l'erreur vennait d'ailleur à ce moment là...
Au fait, je ne comprends pas trop bien le reinterpret_cast...
Ou ça un reinterpret_cast ?
Null part... Juste pour savoir.
Sinon, je pencherais plutôt pour un pb de conception : stocker ton objet en
tant que ArenaObject sous entend qu'il ne sera considéré qu'à travers les
fonctionnalités de base de la classe ArenaObject. Rien n'assure que ton
objet ne soit aussi un Shape*. Mais sans en savoir plus sur le code en
question, je ne peux vraiment avoir d'avis pertinent sur la question, je
veux juste donner moin point de vue d'après ce que j'en voit.
Bon courage
En fait j'ai modifier ce design à cause d'objets tels que les murs.
J'hésitais (et hésite toujours).
La solution précédente était de dériver Circle, Line et InnerCircle de
Shape, puis WallCircle, WallLine et InnerCircle de chacune de ces trois
classes.
De Circle dérivait tous les autres objets d'une arène.
Le problème vient du fait que pour redéfinir un mur, il faut modifier
les 3 classes, et pour faire des murs configurables, ça devient impossible.
J'ai donc pensé à ajouter une autre classe de base ArenaObject.
D'elle viennent les définitions suivantes :
class Wall : ArenaObject;
class WallCircle : Wall, Circle;
class MovingObject : ArenaObject, Circle
class Robot : MovingObject
Est ce qu'une composition te semble plus appropriée ?
class ArenaObject {
protected:
Shape* my_shape;
}; ?
--
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/
"Benoit Rousseau" a écrit dans le message de news: 3fcc9b2b$0$3239$
Jean-Marc Bourguet wrote:
Benoit Rousseau writes:
int main() { ArenaObject* r1 = new MovingObject;
((Shape*)r1) -> within();
dynamic_cast<Shape*>(r1)->within();
Hmmm, il me semblait pourtant l'avoir testé aussi... Peut être que l'erreur vennait d'ailleur à ce moment là...
Au fait, je ne comprends pas trop bien le reinterpret_cast...
Ou ça un reinterpret_cast ? Null part... Juste pour savoir.
Sinon, je pencherais plutôt pour un pb de conception : stocker ton objet en tant que ArenaObject sous entend qu'il ne sera considéré qu'à travers les fonctionnalités de base de la classe ArenaObject. Rien n'assure que ton objet ne soit aussi un Shape*. Mais sans en savoir plus sur le code en question, je ne peux vraiment avoir d'avis pertinent sur la question, je veux juste donner moin point de vue d'après ce que j'en voit. Bon courage
En fait j'ai modifier ce design à cause d'objets tels que les murs. J'hésitais (et hésite toujours).
La solution précédente était de dériver Circle, Line et InnerCircle de Shape, puis WallCircle, WallLine et InnerCircle de chacune de ces trois classes. De Circle dérivait tous les autres objets d'une arène.
Le problème vient du fait que pour redéfinir un mur, il faut modifier les 3 classes, et pour faire des murs configurables, ça devient impossible.
J'ai donc pensé à ajouter une autre classe de base ArenaObject. D'elle viennent les définitions suivantes : class Wall : ArenaObject; class WallCircle : Wall, Circle; class MovingObject : ArenaObject, Circle class Robot : MovingObject
Est ce qu'une composition te semble plus appropriée ? class ArenaObject { protected: Shape* my_shape; }; ?
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
Thomas Parle
"Benoit Rousseau" a écrit dans le message de news: 3fccabd9$0$2837$
En fait j'ai modifier ce design à cause d'objets tels que les murs. J'hésitais (et hésite toujours).
La solution précédente était de dériver Circle, Line et InnerCircle de Shape, puis WallCircle, WallLine et InnerCircle de chacune de ces trois classes. De Circle dérivait tous les autres objets d'une arène.
Si je comprends bien, Shape = forme de base, spécialisées en Circle, Line, etc ArenaObject = manifestation physique dans ton monde (apparemment un niveau style Quake3 ? :)) d'une forme (Shape) donnée.
Le problème vient du fait que pour redéfinir un mur, il faut modifier les 3 classes, et pour faire des murs configurables, ça devient impossible.
J'ai donc pensé à ajouter une autre classe de base ArenaObject. D'elle viennent les définitions suivantes : class Wall : ArenaObject; class WallCircle : Wall, Circle; class MovingObject : ArenaObject, Circle class Robot : MovingObject
Est ce qu'une composition te semble plus appropriée ? class ArenaObject { protected: Shape* my_shape; }; ?
Oui, c'est bien meilleur : en effet, ce que tu appelles ArenaObject correspond à l'incarnation physique d'un modèle mathématique de tes formes (définies par la classe Shape si c'est ce que je crois). Un ArenaObject est une représentation possible que l'on peut créer à partir d'un objet Shape, mais lui-même n'est pas un Shape : une maison comme tu la vois en vrai n'est pas un plan spécial de celle-ci, c'est une chose concrète construite d'après les plans de l'architecte. La composition est ici le meilleur choix : cohérent, et plus souple. De plus, quand tu peux te passer de l'héritage c'est tant mieux (combien de fois ai-je vu des programmeurs qui se servaient de l'héritage pour se servir des fonctionnalités d'un objet, la conception était affreuse, une fois j'ai même vu la classe CApplication qui dérivait...d'une classe Camera !...).
"Benoit Rousseau" <not.provided@no.spam> a écrit dans le message de news:
3fccabd9$0$2837$ba620e4c@reader4.news.skynet.be...
En fait j'ai modifier ce design à cause d'objets tels que les murs.
J'hésitais (et hésite toujours).
La solution précédente était de dériver Circle, Line et InnerCircle de
Shape, puis WallCircle, WallLine et InnerCircle de chacune de ces trois
classes.
De Circle dérivait tous les autres objets d'une arène.
Si je comprends bien, Shape = forme de base, spécialisées en Circle, Line,
etc
ArenaObject = manifestation physique dans ton monde (apparemment un niveau
style Quake3 ? :)) d'une forme (Shape) donnée.
Le problème vient du fait que pour redéfinir un mur, il faut modifier
les 3 classes, et pour faire des murs configurables, ça devient
impossible.
J'ai donc pensé à ajouter une autre classe de base ArenaObject.
D'elle viennent les définitions suivantes :
class Wall : ArenaObject;
class WallCircle : Wall, Circle;
class MovingObject : ArenaObject, Circle
class Robot : MovingObject
Est ce qu'une composition te semble plus appropriée ?
class ArenaObject {
protected:
Shape* my_shape;
}; ?
Oui, c'est bien meilleur : en effet, ce que tu appelles ArenaObject
correspond à l'incarnation physique d'un modèle mathématique de tes formes
(définies par la classe Shape si c'est ce que je crois). Un ArenaObject est
une représentation possible que l'on peut créer à partir d'un objet Shape,
mais lui-même n'est pas un Shape : une maison comme tu la vois en vrai n'est
pas un plan spécial de celle-ci, c'est une chose concrète construite d'après
les plans de l'architecte. La composition est ici le meilleur choix :
cohérent, et plus souple. De plus, quand tu peux te passer de l'héritage
c'est tant mieux (combien de fois ai-je vu des programmeurs qui se servaient
de l'héritage pour se servir des fonctionnalités d'un objet, la conception
était affreuse, une fois j'ai même vu la classe CApplication qui
dérivait...d'une classe Camera !...).
"Benoit Rousseau" a écrit dans le message de news: 3fccabd9$0$2837$
En fait j'ai modifier ce design à cause d'objets tels que les murs. J'hésitais (et hésite toujours).
La solution précédente était de dériver Circle, Line et InnerCircle de Shape, puis WallCircle, WallLine et InnerCircle de chacune de ces trois classes. De Circle dérivait tous les autres objets d'une arène.
Si je comprends bien, Shape = forme de base, spécialisées en Circle, Line, etc ArenaObject = manifestation physique dans ton monde (apparemment un niveau style Quake3 ? :)) d'une forme (Shape) donnée.
Le problème vient du fait que pour redéfinir un mur, il faut modifier les 3 classes, et pour faire des murs configurables, ça devient impossible.
J'ai donc pensé à ajouter une autre classe de base ArenaObject. D'elle viennent les définitions suivantes : class Wall : ArenaObject; class WallCircle : Wall, Circle; class MovingObject : ArenaObject, Circle class Robot : MovingObject
Est ce qu'une composition te semble plus appropriée ? class ArenaObject { protected: Shape* my_shape; }; ?
Oui, c'est bien meilleur : en effet, ce que tu appelles ArenaObject correspond à l'incarnation physique d'un modèle mathématique de tes formes (définies par la classe Shape si c'est ce que je crois). Un ArenaObject est une représentation possible que l'on peut créer à partir d'un objet Shape, mais lui-même n'est pas un Shape : une maison comme tu la vois en vrai n'est pas un plan spécial de celle-ci, c'est une chose concrète construite d'après les plans de l'architecte. La composition est ici le meilleur choix : cohérent, et plus souple. De plus, quand tu peux te passer de l'héritage c'est tant mieux (combien de fois ai-je vu des programmeurs qui se servaient de l'héritage pour se servir des fonctionnalités d'un objet, la conception était affreuse, une fois j'ai même vu la classe CApplication qui dérivait...d'une classe Camera !...).
Zouplaz
Thomas Parle - :
La composition est ici le meilleur choix : cohérent, et plus souple.
Est-ce ce qu'on appelle un objet "composite" dans ce cas ? Ca serait la traduction de "composition" ou bien me goure-je ?
Thomas Parle - concombre.masque@legume.net :
La composition est ici le meilleur choix : cohérent, et plus souple.
Est-ce ce qu'on appelle un objet "composite" dans ce cas ? Ca serait la
traduction de "composition" ou bien me goure-je ?
La composition est ici le meilleur choix : cohérent, et plus souple.
Est-ce ce qu'on appelle un objet "composite" dans ce cas ? Ca serait la traduction de "composition" ou bien me goure-je ?
Thomas Parle
"Zouplaz" a écrit dans le message de news:
Thomas Parle - :
La composition est ici le meilleur choix : cohérent, et plus souple.
Est-ce ce qu'on appelle un objet "composite" dans ce cas ? Ca serait la traduction de "composition" ou bien me goure-je ?
oui, Composite = susceptible d'être contenu dans un Composant. On utilise souvent ces termes en référence au pattern Composant/Composite que je t'invite à voir sur le net si tu ne le connais pas.
"Zouplaz" <pouet@pouet.com> a écrit dans le message de news:
Xns9446CBB9D11CDZoupla@213.228.0.196...
Thomas Parle - concombre.masque@legume.net :
La composition est ici le meilleur choix : cohérent, et plus souple.
Est-ce ce qu'on appelle un objet "composite" dans ce cas ? Ca serait la
traduction de "composition" ou bien me goure-je ?
oui, Composite = susceptible d'être contenu dans un Composant. On utilise
souvent ces termes en référence au pattern Composant/Composite que je
t'invite à voir sur le net si tu ne le connais pas.
La composition est ici le meilleur choix : cohérent, et plus souple.
Est-ce ce qu'on appelle un objet "composite" dans ce cas ? Ca serait la traduction de "composition" ou bien me goure-je ?
oui, Composite = susceptible d'être contenu dans un Composant. On utilise souvent ces termes en référence au pattern Composant/Composite que je t'invite à voir sur le net si tu ne le connais pas.
Zouplaz
Thomas Parle - :
"Zouplaz" a écrit dans le message de news:
Thomas Parle - :
La composition est ici le meilleur choix : cohérent, et plus souple.
Est-ce ce qu'on appelle un objet "composite" dans ce cas ? Ca serait la traduction de "composition" ou bien me goure-je ?
oui, Composite = susceptible d'être contenu dans un Composant. On utilise souvent ces termes en référence au pattern Composant/Composite que je t'invite à voir sur le net si tu ne le connais pas.
C'est marrant, j'aurais cru que le composite c'est celui qui contenait des composants...
Thomas Parle - concombre.masque@legume.net :
"Zouplaz" <pouet@pouet.com> a écrit dans le message de news:
Xns9446CBB9D11CDZoupla@213.228.0.196...
Thomas Parle - concombre.masque@legume.net :
La composition est ici le meilleur choix : cohérent, et plus souple.
Est-ce ce qu'on appelle un objet "composite" dans ce cas ? Ca serait la
traduction de "composition" ou bien me goure-je ?
oui, Composite = susceptible d'être contenu dans un Composant. On utilise
souvent ces termes en référence au pattern Composant/Composite que je
t'invite à voir sur le net si tu ne le connais pas.
C'est marrant, j'aurais cru que le composite c'est celui qui contenait des
composants...
La composition est ici le meilleur choix : cohérent, et plus souple.
Est-ce ce qu'on appelle un objet "composite" dans ce cas ? Ca serait la traduction de "composition" ou bien me goure-je ?
oui, Composite = susceptible d'être contenu dans un Composant. On utilise souvent ces termes en référence au pattern Composant/Composite que je t'invite à voir sur le net si tu ne le connais pas.
C'est marrant, j'aurais cru que le composite c'est celui qui contenait des composants...
Thomas Parle
"Zouplaz" a écrit dans le message de news:
Thomas Parle - :
C'est marrant, j'aurais cru que le composite c'est celui qui contenait des composants...
euh...tout à fait ! (pardon pour l'étourderie ;-) )
"Zouplaz" <pouet@pouet.com> a écrit dans le message de news:
Xns9447F294E1A95Zoupla@213.228.0.4...
Thomas Parle - concombre.masque@legume.net :
C'est marrant, j'aurais cru que le composite c'est celui qui contenait des
composants...
euh...tout à fait ! (pardon pour l'étourderie ;-) )