En fait, en C++ du moins, la différence entre une classe et une structure est meme encore plus subtile:
La seule différence qu'il y ait en C++ tient dans la visibilité par défaut des membres et des fonctions membres
Par défaut (comprend : tant que tu n'as pas indiqué une visibilité (private: protected: ou public: ), les classes ont une visibilité privée et les structures ont une visibilité publique (y compris en ce qui concerne l'héritage )
A cette différence près, les classes et les structures s'utilisent exactement de la même manière
Tout à fait...Si oui, pourquoi favoriser une structure, plutôt qu'une classe d'objet?
Est-ce pour l'avantage de la simplicité? (uniquement des champs/attributs et pas les méthodes, et les "problèmes de l'encapsulation?)
Disons qu'ici, nous serions vraiment dans le cadre d'une structure qui n'aurait absolument aucune autre responsabilité que... de faire tenir toutes les variables qui t'intéressent ensemble, bien qu'elles n'aient sans doute pas d'autres point commun que... de devoir être accessibles d'un bout à l'autre.
Tu pourrais, bien sur, utiliser une classe, et pousser l'encapsulation au point de placer les différentes variables en accessibilités privée, mais cela t'obligerait à rajouter des accesseurs (getters) et des mutateurs (setters) ce qui contreviendrait, de toutes manières, à la loi demeter.
Dés lors, autant ne pas mentir sur les termes clairement faire passer cette structure pour ce qu'elle est : un tas de données pas forcément ordonées (a bunch of data )
Ouait, strictement tout ce que tu veux, et meme des fonctions, si tu veuxPeut-on placer ce qu'on veut dans une structure?
A savoir, des variables "habituelles", mais aussi par exemple des tableaux, listes, ou maps dynamiques d'objets persos?
Tout à faitEn utilisant ce fonctionnement, je devrais donc déclarer la structure au début, par exemple dans le premier module.
Il faut noter qu'une structure peut parfaitement disposer d'un constructeur prenant des argumentsPourrais-je créer une fonction initialise(datas), qui initialiserait les champs de cette structure, séparément de la déclaration? Ou faut-il forcément initialiser les champs dès la déclaration?
Par habitude, j'aime que mes variables soient au moins dans un état cohérent et clairement défini lors de leur création.
Au pire, cela signifie que tu lis / demande les informations nécessaires à l'initialisation de la structure avant de déclarer la variable, mais ce n'est, à bien y réfléchir, pas un mal : cela te permettra de déléguer d'avantage les responsabilités (vu que, de toutes manières, tu devras quand meme lire ou demander ces informations à un moment où à un autre )
Mais tu peux, effectivement, décider de laisser cette structure dans un état "invalide" jusqu'à ce que tu aies réuni l'ensemble des informations qui lui sont nécessaires
Cependant, L'habitude qui consiste à faire en sorte que tes objets soient tout de suite valides et cohérents dés le moment de leur déclaration est une habitude qui évite bien souvent des soucis en permettant, justement, de n'avoir pas à se poser la question de "que reste-t-il à faire avant de pouvoir utiliser l'objet"
Ce n'est pas interdit, mais tu pourrais très bien le faire dans le constructeur aussi, surtout pour les constantes (telles que le PI que l'on remarque dans ton code ou le 2, meme si on ne sait pas à quoi il correspond, il semble destiné à être constant )Par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 struct MaStructure { int variable1; double variable2; objetx variable3; map<int, objety> variable4; }; struct datas; initialise(datas) { variable1 = 2; variable2 = 3.1415926535; ... }
Partager