OVH Cloud OVH Cloud

Surchage de fonctions et héritage

4 réponses
Avatar
JM
Bonjour

J'ai un petit problème.

J'ai une class a qui resemble à ca :

class A
{ public:
void Read(int &a);
void Read(short &a);
}

Je crée une classe dérivée B :

class B : public A
{ void Read(MONTYPE &a);
}

Dans le prgramme principale, je fais la chose suivante :

{ B objet;
int i;

objet.Read(i);
}


A la compilation (Visual C++) cela plante.

D'où ma question : la surchage n'est pas conservée en cas d'héritage?

Merci d'avance.

4 réponses

Avatar
Loïc Joly
class A
{ public:
void Read(int &a);
void Read(short &a);
}

Je crée une classe dérivée B :

class B : public A
{ void Read(MONTYPE &a);
}
[...]



D'où ma question : la surchage n'est pas conservée en cas d'héritage?


Les fonctions dans la classe dérivée cachent toutes fonctions de même
nom dans la classe de base, qui de participent donc pas au mécanisme de
résolution du surcharge.

--
Loïc

Avatar
JM
Ok, merci


class A
{ public:
void Read(int &a);
void Read(short &a);
}

Je crée une classe dérivée B :

class B : public A
{ void Read(MONTYPE &a);
}


[...]


D'où ma question : la surchage n'est pas conservée en cas d'héritage?



Les fonctions dans la classe dérivée cachent toutes fonctions de même
nom dans la classe de base, qui de participent donc pas au mécanisme de
résolution du surcharge.




Avatar
Jean-Marc Bourguet
Loïc Joly writes:

class A
{ public:
void Read(int &a);
void Read(short &a);
}
Je crée une classe dérivée B :
class B : public A
{ void Read(MONTYPE &a);
}
[...]


D'où ma question : la surchage n'est pas conservée en cas d'héritage?


Les fonctions dans la classe dérivée cachent toutes fonctions de même nom
dans la classe de base, qui de participent donc pas au mécanisme de
résolution du surcharge.


Il manque la solution, mettre

using Read;

dans la classe B.

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


Avatar
Gabriel Dos Reis
Jean-Marc Bourguet writes:

| Loïc Joly writes:
|
| > > class A
| > > { public:
| > > void Read(int &a);
| > > void Read(short &a);
| > > }
| > > Je crée une classe dérivée B :
| > > class B : public A
| > > { void Read(MONTYPE &a);
| > > }
| > [...]
| >
| > > D'où ma question : la surchage n'est pas conservée en cas d'héritage?
| >
| > Les fonctions dans la classe dérivée cachent toutes fonctions de même nom
| > dans la classe de base, qui de participent donc pas au mécanisme de
| > résolution du surcharge.
|
| Il manque la solution, mettre
|
| using Read;
^

Il manque « A:: ».

| dans la classe B.

-- Gaby