it-swarm-eu.dev

Équivalent C ++ de "super"?

En Java, au lieu d'utiliser l'opérateur scope, super est utilisé ex:

C++ -> GenericBase::SomeVirtualFunction();
Java -> super.someVirtualMethod();

Y a-t-il quelque chose comme ça en C++ ou cela n'a-t-il pas de sens en C++ à cause de l'héritage multiple?

Merci

19
jmasterx

Il existe une convention de définir un super typedef dans chaque classe .

17
Martin v. Löwis

Les compilateurs Microsofts ont (rejeté par le comité standard C++) l'extension __ super.

Edit: Super peut confondre les lecteurs de code. En raison de l'héritage multiple en C++, il vaut mieux être plus explicite. L'héritage multiple est déjà complexe. Il y a eu une discussion de l'AFAIK sur l'utilité de super pour les modèles qui s'est calmée après avoir réalisé que n'importe qui pouvait taper super si il en avait besoin.

5
Öö Tiib

L'astuce typedef dans le lien de Martin fonctionne assez bien (et c'est une raison partielle pour laquelle C++ n'a pas de super-clé ou hérité AFAIR.) La seule chose dont nous devons nous soucier est que le typedef devrait être dans une section privée. Ne le mettez pas dans une section protégée ou publique, sinon une classe dérivée peut mal utiliser le typedef pour faire référence à ses grands-parents plutôt qu'à son parent.

5
wqking

Il n'y a rien de tel en C++, bien que vous puissiez fournir votre propre typedef:

struct Derived : Base
{
    typedef Base super;
};
4
icecrime