web-dev-qa-db-fra.com

C ++ - struct vs classe

Doublons possibles:
C/C++ Struct vs classe
Quels sont les types de POD en C++?

Salut,

Dans le C++ Dans un livre bref , dans chapitre 6: classes , under Les spécificateurs d'accès , ont mentionné ce qui suit:

Dans une définition de classe, l'accès par défaut pour les membres et les classes de base est privé. Dans une définition de structure, la valeur par défaut est publique. C'est la seule différence entre une classe et une structure , bien que par convention, certains programmeurs utilisent la structure uniquement pour POD et utilisez la classe pour toutes les autres classes .

Mes questions ici sont:

  • N'y a-t-il pas une autre différence entre les classes et les structures dans la mesure où les structures ne contiennent pas de fonctions et contiennent uniquement des données?
  • Que sont les classes POD? Et, qu'entend-on par toutes les autres classes ici? Y a-t-il alors des classes spéciales?

Merci.

49
aali

L'autre différence est que

template<class T> ...

est autorisé, mais

template<struct T> ...

n'est pas.

94
Simon Richter

Vous pourriez vous prouver qu'il n'y a pas d'autre différence en essayant de définir une fonction dans une structure. Je me souviens que même mon professeur d'université qui enseignait les structures et les cours en C++ a été surpris d'apprendre cela (après avoir été corrigé par un étudiant). Je le crois cependant. C'était plutôt amusant. Le professeur n'arrêtait pas de dire quelles étaient les différences et l'élève n'arrêtait pas de dire "en fait, vous pouvez aussi le faire dans une structure". Enfin le prof. a demandé "OK, quelle est la différence" et l'élève l'a informé que la seule différence était l'accessibilité par défaut des membres.

Une recherche rapide sur Google suggère que POD signifie "Plain Old Data".

39
BlueMonkMN

Les classes POD sont des classes de données Plain-Old qui n'ont que des membres de données et rien d'autre. Il y a quelques questions sur stackoverflow à peu près les mêmes. Trouvez-en un ici .

En outre, vous pouvez avoir des fonctions en tant que membres de structures en C++ mais pas en C. Vous devez avoir des pointeurs vers des fonctions en tant que membres de structures en C.

8
Sriram

Ok, POD signifie anciennes données simples. Cela fait généralement référence à structssans toutes les méthodes car ces types sont ensuite utilisés pour structurer plusieurs données qui appartiennent ensemble.

Quant aux structures n'ayant pas de méthodes: j'ai vu plus d'une fois qu'une structure avait des méthodes, et je ne pense pas que ce serait contre nature.

3
René Nyffenegger

1) C'est la seule différence en C++.

2) POD: données anciennes simples Autres classes -> pas POD

2
knivil