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
charly writes:
Une question de bon matin :)
Soit une classe A avec une méthode m1() Soit une classe B qui dérive A avec une méthode m2 qui surcharge m1(int a)
Mnt, dans le prog principal, j'instancie un objet de classe B et j'appelle la méthode m1()
Le compilo grogne -> la méthode m2 ne prend 0 paramters.
Les classes sont des scopes. Et on ne cherche dans les parents qui si on n'a pas trouve dans la classe fille. Donc une fois trouve m1(int) on ne trouve jamais m1(). Solution, utiliser using dans la definition de B. (Ca peut etre dangereux, j'ai souvenir d'un cas ou il y avait une conversion implicite qui faisait que ca compilait, mais ne fonctionnait pas comme desire -- d'accord on peut discutter de la pertinence de la conception dans ce cas mais on ne fait pas toujours ce qu'on veut).
Au fait, le mot methode n'a pas de definition en C++, et j'en ai vu utiliser au moins deux differentes de facon significative. Il vaut mieux utiliser fonction membre/fonction membre virtuelle.
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
charly <charlyspam@yahoo.fr> writes:
Une question de bon matin :)
Soit une classe A avec une méthode m1()
Soit une classe B qui dérive A avec une méthode m2 qui surcharge m1(int a)
Mnt, dans le prog principal, j'instancie un objet de classe B et j'appelle
la méthode m1()
Le compilo grogne -> la méthode m2 ne prend 0 paramters.
Les classes sont des scopes. Et on ne cherche dans les parents qui si
on n'a pas trouve dans la classe fille. Donc une fois trouve m1(int)
on ne trouve jamais m1(). Solution, utiliser using dans la definition
de B. (Ca peut etre dangereux, j'ai souvenir d'un cas ou il y avait
une conversion implicite qui faisait que ca compilait, mais ne
fonctionnait pas comme desire -- d'accord on peut discutter de la
pertinence de la conception dans ce cas mais on ne fait pas toujours
ce qu'on veut).
Au fait, le mot methode n'a pas de definition en C++, et j'en ai vu
utiliser au moins deux differentes de facon significative. Il vaut
mieux utiliser fonction membre/fonction membre virtuelle.
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
Soit une classe A avec une méthode m1() Soit une classe B qui dérive A avec une méthode m2 qui surcharge m1(int a)
Mnt, dans le prog principal, j'instancie un objet de classe B et j'appelle la méthode m1()
Le compilo grogne -> la méthode m2 ne prend 0 paramters.
Les classes sont des scopes. Et on ne cherche dans les parents qui si on n'a pas trouve dans la classe fille. Donc une fois trouve m1(int) on ne trouve jamais m1(). Solution, utiliser using dans la definition de B. (Ca peut etre dangereux, j'ai souvenir d'un cas ou il y avait une conversion implicite qui faisait que ca compilait, mais ne fonctionnait pas comme desire -- d'accord on peut discutter de la pertinence de la conception dans ce cas mais on ne fait pas toujours ce qu'on veut).
Au fait, le mot methode n'a pas de definition en C++, et j'en ai vu utiliser au moins deux differentes de facon significative. Il vaut mieux utiliser fonction membre/fonction membre virtuelle.
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
charly
Les classes sont des scopes. Et on ne cherche dans les parents qui si on n'a pas trouve dans la classe fille. Donc une fois trouve m1(int) on ne trouve jamais m1(). Solution, utiliser using dans la definition de B. (Ca peut etre dangereux, j'ai souvenir d'un cas ou il y avait une conversion implicite qui faisait que ca compilait, mais ne fonctionnait pas comme desire -- d'accord on peut discutter de la pertinence de la conception dans ce cas mais on ne fait pas toujours ce qu'on veut). Bon tant pis, merci, on va caster alors :)
Au fait, le mot methode n'a pas de definition en C++, et j'en ai vu utiliser au moins deux differentes de facon significative. Il vaut mieux utiliser fonction membre/fonction membre virtuelle.
Ok, j'en prends bonne note :)
Les classes sont des scopes. Et on ne cherche dans les parents qui si
on n'a pas trouve dans la classe fille. Donc une fois trouve m1(int)
on ne trouve jamais m1(). Solution, utiliser using dans la definition
de B. (Ca peut etre dangereux, j'ai souvenir d'un cas ou il y avait
une conversion implicite qui faisait que ca compilait, mais ne
fonctionnait pas comme desire -- d'accord on peut discutter de la
pertinence de la conception dans ce cas mais on ne fait pas toujours
ce qu'on veut).
Bon tant pis, merci, on va caster alors :)
Au fait, le mot methode n'a pas de definition en C++, et j'en ai vu
utiliser au moins deux differentes de facon significative. Il vaut
mieux utiliser fonction membre/fonction membre virtuelle.
Les classes sont des scopes. Et on ne cherche dans les parents qui si on n'a pas trouve dans la classe fille. Donc une fois trouve m1(int) on ne trouve jamais m1(). Solution, utiliser using dans la definition de B. (Ca peut etre dangereux, j'ai souvenir d'un cas ou il y avait une conversion implicite qui faisait que ca compilait, mais ne fonctionnait pas comme desire -- d'accord on peut discutter de la pertinence de la conception dans ce cas mais on ne fait pas toujours ce qu'on veut). Bon tant pis, merci, on va caster alors :)
Au fait, le mot methode n'a pas de definition en C++, et j'en ai vu utiliser au moins deux differentes de facon significative. Il vaut mieux utiliser fonction membre/fonction membre virtuelle.
Ok, j'en prends bonne note :)
Jean-Marc Bourguet
charly writes:
Les classes sont des scopes. Et on ne cherche dans les parents qui si on n'a pas trouve dans la classe fille. Donc une fois trouve m1(int) on ne trouve jamais m1(). Solution, utiliser using dans la definition de B. (Ca peut etre dangereux, j'ai souvenir d'un cas ou il y avait une conversion implicite qui faisait que ca compilait, mais ne fonctionnait pas comme desire -- d'accord on peut discutter de la pertinence de la conception dans ce cas mais on ne fait pas toujours ce qu'on veut). Bon tant pis, merci, on va caster alors :)
Non: j'ai ecrit "Solution, utiliser using dans la definition de B."
Donc
struct A { void mf(); };
struct B: public A { using A::mf;
void mf(int); };
int main() { B x; x.mf(); }
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
charly <charlyspam@yahoo.fr> writes:
Les classes sont des scopes. Et on ne cherche dans les parents qui si
on n'a pas trouve dans la classe fille. Donc une fois trouve m1(int)
on ne trouve jamais m1(). Solution, utiliser using dans la definition
de B. (Ca peut etre dangereux, j'ai souvenir d'un cas ou il y avait
une conversion implicite qui faisait que ca compilait, mais ne
fonctionnait pas comme desire -- d'accord on peut discutter de la
pertinence de la conception dans ce cas mais on ne fait pas toujours
ce qu'on veut).
Bon tant pis, merci, on va caster alors :)
Non: j'ai ecrit "Solution, utiliser using dans la definition de B."
Donc
struct A
{
void mf();
};
struct B: public A
{
using A::mf;
void mf(int);
};
int main() {
B x;
x.mf();
}
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
Les classes sont des scopes. Et on ne cherche dans les parents qui si on n'a pas trouve dans la classe fille. Donc une fois trouve m1(int) on ne trouve jamais m1(). Solution, utiliser using dans la definition de B. (Ca peut etre dangereux, j'ai souvenir d'un cas ou il y avait une conversion implicite qui faisait que ca compilait, mais ne fonctionnait pas comme desire -- d'accord on peut discutter de la pertinence de la conception dans ce cas mais on ne fait pas toujours ce qu'on veut). Bon tant pis, merci, on va caster alors :)
Non: j'ai ecrit "Solution, utiliser using dans la definition de B."
Donc
struct A { void mf(); };
struct B: public A { using A::mf;
void mf(int); };
int main() { B x; x.mf(); }
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
charly
Non: j'ai ecrit "Solution, utiliser using dans la definition de B."
Donc Oups, ay sir :) !
struct A { void mf(); };
struct B: public A { using A::mf;
void mf(int); };
int main() { B x; x.mf(); } C'est bcp + clair mnt : merci bcp !
Non: j'ai ecrit "Solution, utiliser using dans la definition de B."
Donc
Oups, ay sir :) !
struct A
{
void mf();
};
struct B: public A
{
using A::mf;
void mf(int);
};
int main() {
B x;
x.mf();
}
C'est bcp + clair mnt : merci bcp !
Non: j'ai ecrit "Solution, utiliser using dans la definition de B."
Donc Oups, ay sir :) !
struct A { void mf(); };
struct B: public A { using A::mf;
void mf(int); };
int main() { B x; x.mf(); } C'est bcp + clair mnt : merci bcp !
Horst Kraemer
On Wed, 04 Feb 2004 10:36:05 +0100, charly wrote:
Une question de bon matin :)
Soit une classe A avec une méthode m1() Soit une classe B qui dérive A avec une méthode m2 qui surcharge m1(int a)
Ce n'est pas une surcharge mais une redéfinition. m1(int) surcharge m1() si et seulement si les deux fonctions ont été définies dans la même classe. Dans ton cas m1(int) cache m1().
Tu pourrais appeler Base::m1() pour on objet du type Derived par
pDerived->Base::m1()
Une autre méthode est l'utilisation du mot clé 'using'
class Derived : public Base { using Base::m1; void m1(int) {} ... };
Par cette méthode la définition de m1() est traitée comme si elle avait lieu dans Derived, et alors m1(int) surcharge m1() dans le sens propre du terme.
Dans ce cas
pDerived->m1()
devrait fonctionner quand ton compilateur est à jour (avec VC++ 6.0 on se sait jamais....)
-- Horst
On Wed, 04 Feb 2004 10:36:05 +0100, charly <charlyspam@yahoo.fr>
wrote:
Une question de bon matin :)
Soit une classe A avec une méthode m1()
Soit une classe B qui dérive A avec une méthode m2 qui surcharge m1(int a)
Ce n'est pas une surcharge mais une redéfinition.
m1(int) surcharge m1() si et seulement si les deux fonctions ont été
définies dans la même classe. Dans ton cas m1(int) cache m1().
Tu pourrais appeler Base::m1() pour on objet du type Derived par
pDerived->Base::m1()
Une autre méthode est l'utilisation du mot clé 'using'
class Derived : public Base
{
using Base::m1;
void m1(int) {}
...
};
Par cette méthode la définition de m1() est traitée comme si elle
avait lieu dans Derived, et alors m1(int) surcharge m1() dans le sens
propre du terme.
Dans ce cas
pDerived->m1()
devrait fonctionner quand ton compilateur est à jour (avec VC++ 6.0 on
se sait jamais....)
Soit une classe A avec une méthode m1() Soit une classe B qui dérive A avec une méthode m2 qui surcharge m1(int a)
Ce n'est pas une surcharge mais une redéfinition. m1(int) surcharge m1() si et seulement si les deux fonctions ont été définies dans la même classe. Dans ton cas m1(int) cache m1().
Tu pourrais appeler Base::m1() pour on objet du type Derived par
pDerived->Base::m1()
Une autre méthode est l'utilisation du mot clé 'using'
class Derived : public Base { using Base::m1; void m1(int) {} ... };
Par cette méthode la définition de m1() est traitée comme si elle avait lieu dans Derived, et alors m1(int) surcharge m1() dans le sens propre du terme.
Dans ce cas
pDerived->m1()
devrait fonctionner quand ton compilateur est à jour (avec VC++ 6.0 on se sait jamais....)