Disons que j'ai des cours Foo
et que Bar
j'installe comme ceci:
class Foo
{
public:
int x;
virtual void printStuff()
{
std::cout << x << std::endl;
}
};
class Bar : public Foo
{
public:
int y;
void printStuff()
{
// I would like to call Foo.printStuff() here...
std::cout << y << std::endl;
}
};
Comme annoté dans le code, j'aimerais pouvoir appeler la fonction de la classe de base que je remplace. En Java, il y a la super.funcname()
syntaxe. Est-ce possible en C ++?
Réponses:
La syntaxe C ++ est comme ceci:
la source
call super requirement
, consultez-le ici: en.wikipedia.org/wiki/Call_super )Oui,
C'est la même chose qu'en
super
Java, sauf qu'il permet d'appeler des implémentations à partir de différentes bases lorsque vous avez plusieurs héritages.la source
Parfois, vous devez appeler l'implémentation de la classe de base, lorsque vous n'êtes pas dans la fonction dérivée ... Cela fonctionne toujours:
la source
x
être de typeBase*
et utiliser laBase::Foo
syntaxe pour que cela fonctionneJuste au cas où vous le feriez pour beaucoup de fonctions dans votre classe:
Cela pourrait économiser un peu d'écriture si vous souhaitez renommer Foo.
la source
Si vous souhaitez appeler une fonction de la classe de base à partir de sa classe dérivée, vous pouvez simplement appeler à l'intérieur de la fonction remplacée en mentionnant le nom de la classe de base (comme Foo :: printStuff () ).
le code va ici
Encore une fois, vous pouvez déterminer à l'exécution quelle fonction appeler en utilisant l'objet de cette classe (dérivée ou de base) .Mais cela nécessite que votre fonction à la classe de base soit marquée comme virtuelle.
code ci-dessous
la source
vérifie ça...
production
la meilleure façon est d'utiliser la fonction base :: comme disent @sth
la source
protected
héritage. Pour transtyper un pointeur de classe de base, vous devez utiliser l'héritage public.Oui, vous pouvez l'appeler. La syntaxe C ++ pour appeler la fonction de classe parent dans la classe enfant est
En savoir plus sur la fonction prioritaire .
la source