web-dev-qa-db-fra.com

La structure C++ peut-elle avoir des fonctions membres?

J'étais assez confus quant à la différence entre struct et class car je semblais les voir utiliser à peu près les mêmes choses. J'ai googlé les différences et la seule réponse que j'ai vue était que les structures ont des membres publics par défaut et que les classes ont des membres privés par défaut. Cependant, mes conférenciers viennent de me dire que les structures ne peuvent pas contenir de fonctions membres. Mais j'ai vu beaucoup de sujets sur Internet où les gens incluent des fonctions membres dans des structures et disent spécifiquement que c'est bien de le faire.

Mes professeurs semblent catégoriques: les structures, par définition, ne peuvent pas avoir de fonctions, alors que se passe-t-il? La seule chose à laquelle je pouvais penser, c'est que peut-être le compilateur change les fonctions d'une structure à une autre, afin qu'elles ne contiennent techniquement pas de fonctions ... Existe-t-il une réponse claire à ces contradictions?

36
Sam

J'ai googlé les différences et la seule réponse que j'ai vue était que les structures ont des membres publics par défaut et que les classes ont des membres privés par défaut.

Oui c'est correct De plus, les bases d'une structure sont héritées publiquement par défaut, alors que les bases d'une classe sont héritées de manière privée par défaut.

La déclaration d'une fonction en tant que membre d'une structure a exactement la même sémantique que la déclaration d'une fonction en tant que membre d'une classe, à l'exception de la différence que vous avez notée. Dans chaque cas, elles s'appellent fonctions membres .

37
Brian

Vos conférenciers ont manifestement tort, en supposant qu'ils parlent réellement de C++ et non de C.

Il est très facile de vous le prouver en code ou de choisir Le langage de programmation C++ et de rechercher des structures.

6
meagar

C++ structs peut a définitivement des fonctions membres . Les structures C, en revanche, sont une bête bien différente. Ce sont essentiellement des tableaux qui fournissent des noms et des informations de type pour certaines indications.

3
Patrick Collins

Il me semble que le fait que quelque chose soit autorisé par une langue ne signifie PAS que c'est une bonne idée. Bien que techniquement, une structure C++ puisse contenir des fonctions, je ne pense pas que l'intention initiale du type de données de structure était de contenir des fonctions. L’introduction d’un type de classe n’a-t-elle pas pour objectif principal de permettre la définition des données et de la logique qui les exploite dans une relation étroite, favorisant ainsi des interfaces plus saines avec les données?

1
Travis

Dans le standard C++ 98:

Une structure est une classe définie avec la structure class-key; ses membres et ses classes de base (clause 10) sont publics par défaut (clause 11).

et

Les membres d'une classe définie avec le mot clé class sont privés par défaut. Les membres d'une classe définie avec les mots-clés struct ou union sont publics par défaut.

Cela signifie donc que la seule différence entre struct et class est le contrôle d'accès par défaut aux membres qui est public ou private.

La structure C++ peut-elle avoir des fonctions membres?

Oui, ils peuvent.

Mes professeurs semblent catégoriques: les structures, par définition, ne peuvent pas avoir de fonctions, alors que se passe-t-il?

Si c'est une leçon sur C, c'est correct . Si c'est une leçon sur C++, ce n'est pas correct.

La seule chose à laquelle je pouvais penser, c'est que peut-être le compilateur change les fonctions d'une structure à une autre, afin qu'elles ne contiennent techniquement pas de fonctions ... Existe-t-il une réponse claire à ces contradictions?

Oui, la réponse est claire: la structure C++ peut avoir des fonctions membres.

0
YuGiOhJCJ