OVH Cloud OVH Cloud

Surcharge et héritage

1 réponse
Avatar
Hugues Cassé
Je travaille avec G++ et je fais fasse à un message d'erreur dans la
situation suivante.

J'ai une classe C1
class C1 {
public:
virtual void f(int) = 0;
virtual void f(void);
};

Une classe C2 qui en hérite:
class C2: public C1 {
public:
virtual void f(int);
}

Et enfin, une classe C3:
class C3: public C2 {
};

Ensuite, j'ai le morceau de code suivant:
C3 o;
o.f();

Et g++ me répond qu'il n'arrive pas à résoudre f(void) dans C3 et que
les seules possibilités sont C3::f(int).

La question est la suivante : est-ce un bogue de g++ ou est-ce que ce
comportement fait partie de la norme C++ ?

Merci d'avance, H. Cassé

1 réponse

Avatar
Jean-Marc Bourguet
Hugues Cassé writes:
La question est la suivante : est-ce un bogue de g++ ou est-ce que ce
comportement fait partie de la norme C++ ?


SunCC donne:

line 10: Warning: C2::f hides the virtual function C1::f().

Classique. Pour resoudre les surcharges ca fonctionne en deux temps:
tout d'abord trouver les declarations et ensuite choisir la
meilleure. Dans une hierarchie de classe, la recherche de declaration
s'arrete des qu'on en a trouve une. Donc C2::f(int) cache
C1::f(void). Une clause
using C1::f;
dans C2 permet de rendre C1::f(void) visible.

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