74 votes

C ++: une structure peut-elle hériter d'une classe?

Je suis à la recherche à la mise en œuvre d'une API que j'utilise.

J'ai remarqué qu'une struct hérite d'une classe et j'ai fait une pause pour réfléchir sur elle...

Tout d'abord, je n'ai pas vu dans le C++ manuel j'ai étudié avec une struct pourrait hériter d'une autre structure:

struct A {};
struct B : public A {};

Je suppose que, dans un tel cas, struct B hérite de toutes les données dans stuct A. Peut-on déclarer public/privé, dans une struct?

Mais j'ai remarqué ceci:

 class A {};
 struct B : public A {};  

À partir de ma ligne en C++ manuel:

Une classe est un concept élargi de la structure des données: au lieu de tenir les seules données, il peut contenir à la fois des données et des fonctions.

Est la au-dessus de l'héritage valide même si la classe A a certaines fonctions de membre? Qu'advient-il des fonctions lorsqu'un struct hériter d'eux? Et que dire de l'inverse: une classe héritant d'une struct?

Pratiquement parlant, j'ai ceci:

struct user_messages {
  std::list<std::string> messages;
};

Et je l'ai utilisé pour itérer dessus comme c' foreach message in user_messages.messages.

Si je veux ajouter des fonctions de membre de ma structure, je peut modifier sa déclaration et de "promouvoir" à une catégorie, ajouter des fonctions, et encore itérer sur mon user_messages.les messages que j'ai fait avant?

Évidemment, je suis encore un newbie et je suis encore difficile de savoir comment les structures et les classes d'interagir les uns avec les autres, quelle est la différence pratique entre les deux, et ce que les règles d'héritage sont...

116voto

Vite Falcon Points 3422

Oui, struct peut hériter de la classe en C++.

En C++, les classes et la structure sont les mêmes à l'exception de leur comportement par défaut en ce qui concerne l'héritage et les niveaux d'accès des membres.

La classe C++

  • L'Héritage par défaut = privé
  • Niveau d'Accès par défaut pour les Membres de Variables et de Fonctions = privé

C++ struct

  • L'Héritage par défaut = public
  • Niveau d'Accès par défaut pour les Membres de Variables et de Fonctions = public

43voto

maxschlepzig Points 3578

En C ++

 struct {  };
 

est équivalent à

 class { public: };
 

C'est-à-dire que les membres et les attributs d'une structure / classe sont par défaut publics / privés.

7voto

Michael Anderson Points 21181

La seule différence entre une structure et d'une classe est le niveau d'accès par défaut pour les membres (privé pour les classes, publique pour les structures). Cela signifie qu'une structure doit être en mesure d'hériter d'une classe, et vice-versa.

Cependant, il y a généralement une différence dans la façon dont les structures et les classes sont utilisés qui n'est pas prescrite par la norme. les structures sont souvent utilisés pour pure data ( ou des objets sans polymorphisme en fonction de vos projets de préférence) et de classes sont utilisées pour les autres cas. Je tiens à souligner que c'est juste une différence stylistique et n'est pas requise.

6voto

Puppy Points 90818

La principale chose à comprendre est que les structures proviennent de C, alors que les classes sont C ++. Cela signifie que même si les structures sont des citoyens orientés objet de première classe, elles ont également un objectif hérité, ce qui explique la séparation des classes et la structure en tant que public d'accès par défaut. Cependant, une fois que cela est fait, ils sont absolument et totalement identiques et interchangeables à tous égards.

5voto

MBennett Points 411

Une structure est la même chose qu'une classe, sauf qu'une classe définit par défaut ses membres sur privé, tandis qu'une structure définit ses membres sur public. En conséquence, oui, vous pouvez hériter entre les deux. Voir http://stackoverflow.com/questions/577465/in-c-can-i-derive-a-class-from-a-struct .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X