c++ problème avec la surcharge de fonctions dans une classe héritée
C'est peut-être une question de noob, désolé. Je pose une drôle de question récemment lors de la tentative de déconner avec quelques éléments de niveau en c++, la fonction de surcharge et à l'héritage.
Je vais vous montrer un exemple simple, juste pour démontrer le problème;
Il y a deux classes, classA
et classB
, comme ci-dessous;
class classA{
public:
void func(char[]){};
};
class classB:public classA{
public:
void func(int){};
};
Selon ce que je sais classB
doit maintenant posséder deux func(..)
fonctions, surchargé à cause des arguments différents.
Mais en essayant ce dans la méthode main;
int main(){
int a;
char b[20];
classB objB;
objB.func(a); //this one is fine
objB.func(b); //here's the problem!
return 0;
}
Il donne des erreurs que la méthode void func(char[]){};
qui est dans la classe super, classA
, n'est pas visible int la classe dérivée, classB
.
Comment puis-je surmonter cela? n'est-ce pas la façon dont la surcharge de travaille en c++? Je suis novice en c++, mais en Java, je sais que je peux faire usage de quelque chose comme cela.
Bien que j'ai déjà trouvé ce fil qui pose des questions sur une des questions similaires, je pense que les deux cas sont différents.
Vous devez vous connecter pour publier un commentaire.
Tous vous avez besoin est un
using
:Il n'a pas de recherche de la classe de base pour
func
car il déjà trouvé un dans la classe dérivée. Leusing
déclaration apporte l'autre surcharge dans le même champ d'application de sorte qu'il peut participer à la résolution de surcharge.Il est bien expliqué par exemple, dans cette question, les réponses de:
Pourquoi devrais-je utiliser la fonction "aide" de mot-clé pour accéder à ma méthode de classe de base?
En bref, le compilateur va arrêter la recherche pour les méthodes de correspondance des classes parents, quand il trouve de la correspondance du nom de la méthode dans la classe actuelle, même lorsque cette méthode n'est pas compatible. Je suppose que cela permet à certains conversions de type automatique pour travailler de manière plus logique, sans avoir besoin de le remplacer afin de nombreux parents les méthodes de la classe.
using
déclaration en général.Si vous remplacez une variante d'une fonction dans la classe dérivée, vous devez remplacer toutes les variantes. Vous pouvez utiliser ce JLledo suggéré ou d'écriture de la variante de la fonction dans la classe dérivée qui appelle tout simplement la classe de base de la fonction de la même signature.
Vous devez passer l'argument de type int dans
bcs il a été surchargé avec des argument int