Je viens de lire sur une faq c++ que lorsque 2 classes (class1 et
class2) virtuelles héritent d'une classe mère avec 2 fonctions (foo() et
bar()), que class1 implemente foo() et class2 implemente bar(),
alors si class1 apelle la fonction bar(), la fonction appellée sera
celle de class2.
Cela me semble bizarre etant donné que les class1 et 2 n'ont aucun
rapport entre elles.
Quelqu'un peut il confirmer?
si je suis pas clair, la version d'iorigine est ici :
http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.10
d'autre part, si ceci fonctionne, que ce passe t'il si 3 classes
virtuelles héritent de la classe mère?
Si la fonction bar() est implémenté dans les class2 et 3 par exemple,
laquelle sera appelée si class1 appelle cette fonction?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc Bourguet
Rage writes:
Cela me semble bizarre etant donné que les class1 et 2 n'ont aucun rapport entre elles. Quelqu'un peut il confirmer?
La FAQ est correcte, ta comprehension non. Les classes ont un rapport: elles heritent virtuellement de la classe de base *et* cet appel ne se fait que si le type dynamique herite de ces deux classes (ce qui est le cas dans la FAQ: le type le type dynamique est Join).
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
Rage <regis.ramillien@libertysurf.fr> writes:
Cela me semble bizarre etant donné que les class1 et 2 n'ont aucun
rapport entre elles. Quelqu'un peut il confirmer?
La FAQ est correcte, ta comprehension non. Les classes ont un
rapport: elles heritent virtuellement de la classe de base *et* cet
appel ne se fait que si le type dynamique herite de ces deux classes
(ce qui est le cas dans la FAQ: le type le type dynamique est Join).
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
Cela me semble bizarre etant donné que les class1 et 2 n'ont aucun rapport entre elles. Quelqu'un peut il confirmer?
La FAQ est correcte, ta comprehension non. Les classes ont un rapport: elles heritent virtuellement de la classe de base *et* cet appel ne se fait que si le type dynamique herite de ces deux classes (ce qui est le cas dans la FAQ: le type le type dynamique est Join).
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
Rage
Jean-Marc Bourguet wrote:
Rage writes:
Cela me semble bizarre etant donné que les class1 et 2 n'ont aucun rapport entre elles. Quelqu'un peut il confirmer?
La FAQ est correcte, ta comprehension non. Les classes ont un rapport: elles heritent virtuellement de la classe de base *et* cet appel ne se fait que si le type dynamique herite de ces deux classes (ce qui est le cas dans la FAQ: le type le type dynamique est Join).
A+
ouaip, merci.
mais j'ai toujours du mal avec l'héritage multiple. Si la class Join hérite de 3 classes, que 2 d'entre elles définissent la fonction Bar() et qu'on souhaite appeller cette fonction. Alors la classe Join doit utiliser un truc du type class2::bar(), ca marche pas autrement, c ca?
merci
Rage
Jean-Marc Bourguet wrote:
Rage <regis.ramillien@libertysurf.fr> writes:
Cela me semble bizarre etant donné que les class1 et 2 n'ont aucun
rapport entre elles. Quelqu'un peut il confirmer?
La FAQ est correcte, ta comprehension non. Les classes ont un
rapport: elles heritent virtuellement de la classe de base *et* cet
appel ne se fait que si le type dynamique herite de ces deux classes
(ce qui est le cas dans la FAQ: le type le type dynamique est Join).
A+
ouaip, merci.
mais j'ai toujours du mal avec l'héritage multiple.
Si la class Join hérite de 3 classes, que 2 d'entre elles définissent la
fonction Bar() et qu'on souhaite appeller cette fonction.
Alors la classe Join doit utiliser un truc du type class2::bar(), ca
marche pas autrement, c ca?
Cela me semble bizarre etant donné que les class1 et 2 n'ont aucun rapport entre elles. Quelqu'un peut il confirmer?
La FAQ est correcte, ta comprehension non. Les classes ont un rapport: elles heritent virtuellement de la classe de base *et* cet appel ne se fait que si le type dynamique herite de ces deux classes (ce qui est le cas dans la FAQ: le type le type dynamique est Join).
A+
ouaip, merci.
mais j'ai toujours du mal avec l'héritage multiple. Si la class Join hérite de 3 classes, que 2 d'entre elles définissent la fonction Bar() et qu'on souhaite appeller cette fonction. Alors la classe Join doit utiliser un truc du type class2::bar(), ca marche pas autrement, c ca?
merci
Rage
Jean-Marc Bourguet
Rage writes:
Si la class Join hérite de 3 classes, que 2 d'entre elles définissent la fonction Bar() et qu'on souhaite appeller cette fonction. Alors la classe Join doit utiliser un truc du type class2::bar(), ca marche pas autrement, c ca?
Oui.
-- 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
Rage <regis.ramillien@libertysurf.fr> writes:
Si la class Join hérite de 3 classes, que 2 d'entre elles
définissent la fonction Bar() et qu'on souhaite appeller cette
fonction. Alors la classe Join doit utiliser un truc du type
class2::bar(), ca marche pas autrement, c ca?
Oui.
--
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
Si la class Join hérite de 3 classes, que 2 d'entre elles définissent la fonction Bar() et qu'on souhaite appeller cette fonction. Alors la classe Join doit utiliser un truc du type class2::bar(), ca marche pas autrement, c ca?
Oui.
-- 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
Geoffrey BAUDIN
Arf, sa tombe bien c exactement le probleme sur lequel je tombe ... je resume un peu par rapport a mon pb pour etre sur d'avoir bien compris ce qui se passe ...
si g une classe de Base A et B
class A { virtual Funct1() = 0; virtual toto() = 0; }
class B { virtual Funct2() = 0; virtual toto() = 0; }
je peux donc faire une classe C
class C : public A, public B { virtual Funct1(); virtual Funct2(); virtual toto(); }
si je fais un truc comme ca :
C *p = new C(); A *p1 = p; B *p2 = p;
p1->Funct1 ; // m'execute le code de la fonction C::Funct1() ?? p2->Funct2; // m'execute le code de la fonction C::Funct2() ??
Que se passe t'il pour la function toto() ?? Faut il donc si g pas trop mal lu la FAQ en question faire
class D { virtual toto() = 0; }
class A : public virtual D { virtual Funct1() = 0; virtual toto() = 0; // peut on a ce niveau-ci ne pas definir de corps pour toto() ?? }
class B : public virtual D { virtual Funct2() = 0; virtual toto() = 0; }
class C : public A, public B { virtual Funct1(); virtual Funct2(); virtual toto(); }
merci, c pas encore bien bien clair ce truc dans mon esprit ...
"Jean-Marc Bourguet" a écrit dans le message de news:
Rage writes:
Si la class Join hérite de 3 classes, que 2 d'entre elles définissent la fonction Bar() et qu'on souhaite appeller cette fonction. Alors la classe Join doit utiliser un truc du type class2::bar(), ca marche pas autrement, c ca?
Oui.
-- 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
Arf, sa tombe bien c exactement le probleme sur lequel je tombe ...
je resume un peu par rapport a mon pb pour etre sur d'avoir bien compris ce
qui se passe ...
si g une classe de Base A et B
class A
{
virtual Funct1() = 0;
virtual toto() = 0;
}
class B
{
virtual Funct2() = 0;
virtual toto() = 0;
}
je peux donc faire une classe C
class C : public A, public B
{
virtual Funct1();
virtual Funct2();
virtual toto();
}
si je fais un truc comme ca :
C *p = new C();
A *p1 = p;
B *p2 = p;
p1->Funct1 ; // m'execute le code de la fonction C::Funct1() ??
p2->Funct2; // m'execute le code de la fonction C::Funct2() ??
Que se passe t'il pour la function toto() ??
Faut il donc si g pas trop mal lu la FAQ en question faire
class D
{
virtual toto() = 0;
}
class A : public virtual D
{
virtual Funct1() = 0;
virtual toto() = 0; // peut on a ce niveau-ci ne pas definir de
corps pour toto() ??
}
class B : public virtual D
{
virtual Funct2() = 0;
virtual toto() = 0;
}
class C : public A, public B
{
virtual Funct1();
virtual Funct2();
virtual toto();
}
merci, c pas encore bien bien clair ce truc dans mon esprit ...
"Jean-Marc Bourguet" <jm@bourguet.org> a écrit dans le message de
news:pxbisdk6lmw.fsf@news.bourguet.org...
Rage <regis.ramillien@libertysurf.fr> writes:
Si la class Join hérite de 3 classes, que 2 d'entre elles
définissent la fonction Bar() et qu'on souhaite appeller cette
fonction. Alors la classe Join doit utiliser un truc du type
class2::bar(), ca marche pas autrement, c ca?
Oui.
--
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
Arf, sa tombe bien c exactement le probleme sur lequel je tombe ... je resume un peu par rapport a mon pb pour etre sur d'avoir bien compris ce qui se passe ...
si g une classe de Base A et B
class A { virtual Funct1() = 0; virtual toto() = 0; }
class B { virtual Funct2() = 0; virtual toto() = 0; }
je peux donc faire une classe C
class C : public A, public B { virtual Funct1(); virtual Funct2(); virtual toto(); }
si je fais un truc comme ca :
C *p = new C(); A *p1 = p; B *p2 = p;
p1->Funct1 ; // m'execute le code de la fonction C::Funct1() ?? p2->Funct2; // m'execute le code de la fonction C::Funct2() ??
Que se passe t'il pour la function toto() ?? Faut il donc si g pas trop mal lu la FAQ en question faire
class D { virtual toto() = 0; }
class A : public virtual D { virtual Funct1() = 0; virtual toto() = 0; // peut on a ce niveau-ci ne pas definir de corps pour toto() ?? }
class B : public virtual D { virtual Funct2() = 0; virtual toto() = 0; }
class C : public A, public B { virtual Funct1(); virtual Funct2(); virtual toto(); }
merci, c pas encore bien bien clair ce truc dans mon esprit ...
"Jean-Marc Bourguet" a écrit dans le message de news:
Rage writes:
Si la class Join hérite de 3 classes, que 2 d'entre elles définissent la fonction Bar() et qu'on souhaite appeller cette fonction. Alors la classe Join doit utiliser un truc du type class2::bar(), ca marche pas autrement, c ca?
Oui.
-- 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