7
votes

Comment implémenter l'héritage en C ++ et résoudre la maladie "La classe mère n'est pas une base accessible de la classe enfant"?

Je suis nouveau à C ++. J'aime explorer l'idée d'héritage en C ++. Chaque fois que j'essaie de compiler le code suivant, j'obtiens l'erreur: xxx

voici mon code: xxx

Qu'est-ce qui ne va vraiment pas là? Quelle est la cause de l'erreur et comment l'éviter. S'il vous plaît expliquer en détail.


4 commentaires

Vous voulez probablement faire Classe Bike: Véhicule public au lieu de Just Vélo de classe: Véhicule


FYI: Vous y compris les en-têtes C en C ++, vous êtes manquant #include , les classes sont par défaut de la portée privée de type Classe de classe: BASECLASS est une héritage privé, et c'est Int Main () ...


@ AJG85 Merci de me mettre à jour.


@Maxood Juste les observations initiales qui devraient couvrir toutes vos erreurs de compilation actuelles et avertissements. Btw c'est #include si vous voulez std :: cout , std :: cin.get () , etc. Vous ne " t besoin conio.h du tout ;-)


4 Réponses :


17
votes

Classe a héritage par défaut privé, vous devez donc spécifier public , c'est-à-dire <

 XXX  

ANS SO. struct a une héritage public comme défaut.


3 commentaires

Disons que si j'aime modifier le code ci-dessus pour en savoir plus sur les mots-clés virtuels, amis et protégés. Dans quels scénarios nous utilisons ces mots-clés en maintenant l'exemple de code ci-dessus.


@Maxod je commencerais en recherchant un héritage virtuel, des spécificateurs d'accès (public, privé, protégé), des méthodes virtuelles et des méthodes virtuelles pures. C'est tout simplement trop pour expliquer dans un commentaire, mais il y a beaucoup de ressources en ligne et même des questions sur Stackoverflow sur tous ces sujets. Bonne chance!


Merci encore! Je republierai le même code avec quelques modifications et modifications dans le scénario avec une nouvelle question.



1
votes

Vous devez spécifier le niveau d'accès de l'héritage:

class Bike : public Vehicle


0 commentaires

1
votes

Si vous ne spécifiez pas de spécificateur d'accès, héritage est automatiquement privé . Vous devez modifier cette ligne: xxx

à ceci: xxx


3 commentaires

privé signifie que seuls les membres privés sont hérités?


Non, cela signifie que tous les membres des parents sont privés à la classe de base.


Vous voulez dire que tous les membres des parents sont privés (invisibles) à la classe enfant?



0
votes

Encapsulation est atteint en plaçant des données connexes au même endroit et en offrant une sécurité aux données .include

  1. privé - accès accordé à la même classe
  2. public - n'importe quel code peut accéder aux données
  3. protégé - accès accordé aux méthodes de la même classe, classe d'amis et classe dérivée

0 commentaires