2010-04-17 7 views
0

Lors de l'héritage de classes en C++, je comprends que les membres sont hérités. Mais comment hérite-t-on aussi des méthodes? Par exemple, dans le code ci-dessous, j'aimerais que la méthode "getValues" soit accessible non seulement par CPoly, mais aussi par n'importe quelle classe qui en hérite. On peut donc appeler directement "getValues" sur CRect. En d'autres termes, y a-t-il un moyen d'hériter des méthodes pour des méthodes génériques simples comme les getters et les setters?Comment hériter des méthodes d'une classe parente en C++

+0

Faire les variables 'width' et' height' 'protected' (au lieu de membres' private') de 'CPoly' pour pouvoir y accéder dans' CRect'. –

+0

Merci Matt! Ça a marché. – Pat

Répondre

5

Vous pouvez appel getValues en utilisant CRect, parce que getValues est hérité. Le terme "méthodes" n'est pas défini par C++. Si vous faites référence à des fonctions membres non statiques, elles sont membres et héritées des classes dérivées. Votre erreur n'est pas que getValues n'est pas hérité, mais que vous essayez d'accéder aux membres inaccessibles width et height.

+0

Wow merci pour la réponse rapide! Passer du privé au protégé a permis au CRect de fonctionner comme prévu: – Pat

0

Tout est hérité, il n'y a aucune distinction entre les variables membres et les fonctions membres à cet égard.

Dans CPoly si vous voulez que les personnes qui utilisent votre classe pour voir les membres (que ce soit des fonctions ou des variables) vous utilisez public. Pour les classes dérivées de CPoly si vous voulez qu'elles puissent utiliser les membres (fonctions ou variables), vous devez les faire public ou protected.

Dans le type dérivé CRect, lorsque vous spécifiez la classe de base, vous devez également spécifier un membre d'accès par défaut pour tous les membres hérités (qu'il s'agisse de fonctions ou de variables). Si vous spécifiez public, tous les membres hérités qui sont public resteront public. Si vous spécifiez protected, tous les membres hérités qui sont public ou protected seront protected. Si vous spécifiez private, tous les membres hérités deviendront private.