Est-ce que c++ struct peut avoir des fonctions de membre?

j'étais assez confus au sujet de la différence entre struct et classe car je semblais les voir utilisés pour à peu près les mêmes choses. J'ai googlé les différences et la seule réponse que j'ai vu était que les structures ont des membres publics par défaut et les classes ont des membres privés par défaut. Cependant, mes professeurs viennent de me dire que les structures ne peuvent pas contenir des fonctions de membre. Mais j'ai vu beaucoup de fils sur internet où les gens incluent des fonctions de membre dans les structures et disent spécifiquement qu'il est correct de le faire.

mes conférenciers semblent catégoriques que les structures par définition ne peuvent pas avoir de fonctions, alors que se passe-t-il? La seule chose à laquelle je pourrais penser est que peut-être le compilateur change les fonctions dans une structure en quelque chose d'autre de sorte qu'elles ne contiennent pas techniquement de fonctions... Est-il une réponse claire à ces contradictions?

36
demandé sur Sam 2014-06-13 06:41:20

4 réponses

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

Oui, c'est correct. En outre, les bases d'une structure sont héritées publiquement par défaut, tandis que les bases d'une classe sont héritées en privé par défaut.

déclarer une fonction en tant que membre d'une structure a précisément la même sémantique que déclarer une fonction en tant que membre d'une classe, sauf la différence que vous avez notée. Dans chaque cas, ils sont appelés fonctions de membre .

35
répondu Brian 2014-06-13 02:44:04

vos conférenciers ont manifestement tort, en supposant qu'ils parlent en fait de C++ et non de C.

c'est trivialement facile de vous le prouver en code, ou de récupérer le langage de programmation C++ et de chercher des structures.

6
répondu meagar 2014-06-13 02:44:02

C++ structs peut certainement avoir des fonctions de membre du . Les structures C, d'un autre côté, sont une bête très différente -- ce sont essentiellement des tableaux qui fournissent des noms et des informations de type pour certains indices.

3
répondu Patrick Collins 2017-05-23 12:32:21

il me semble que ce n'est pas parce que quelque chose est permis par une langue que c'est une bonne idée. Bien que techniquement une structure C++ puisse contenir des fonctions, Je ne pense pas que l'intention originale du type de données struct était de contenir des fonctions. N'était-ce pas le but principal de l'introduction D'un type de classe pour soutenir la définition des données et la logique qui agit sur les données dans une relation étroite, favorisant ainsi des interfaces plus saines aux données?

1
répondu Travis 2016-07-21 15:25:09