structure ou class question pratique?

Salut , voila je continue de bosser sur mon projet de gestion de terrariums (avec des sales bette dedans), et je veux faire evoluer mon code afin qu'il soit plus pratique a transformer et donc a adapter !

la question est la suivante :

est il plus judicieux de créé un tableau de structure et des fonctions avec des boucles qui execute un code , ou alors de cree une class et donc un objet terarium pour chaque terra que je créé , en fait je n'arive pas bien a voir ce qui pourrait etre le mieux !

quelle est votre avis et de quel element avez vous besoin pour me repondre voici ce que je voulais faire comme structure :

typedef struct Terrarium  Terrarium;
struct  Terrarium
{
 char nom[20];// non du terrarium
 float Temp_Jour=25.0;// temperature du jour 
 float Temp_Nuit=20.0;// temperature de nuit
 DeviceAddress adresse_sonde;/ adresse de sonde DS18B20 dallas
 bool Pb_sonde=false;// detection de probleme avec la sonde
 float Temp;// temperature mesuré
 byte Pin;// pin de controle relais
 byte index;// index de position
 char Notification[20];// identifiant pushing box

};

Bonjour,

En C++ une structure est une classe mais avec tout ses membres public par défaut. La question ne se pose donc pas. C'est à toi de voir si tu veut faire de la vrai POO (classe + attributs privés) ou juste une structure "à la C" (structure, ou classe + attributs publics).

le truc c’est que j’aprend sur le site du zero j’ai pas de formation en programation et je pense que je passe a coté de certaine notion, est ce que l’une est plus simple que l’autre ?

je me dit que sa doit etre chiant a gere en POO lorsque l’on veu faire la meme action exemple

avec une structure :
une boucle for qui balaye un tableau de structure
for( i=0, i<nb_max,i++){
recuper_temperature(structure.temp[i]);
}
avec une poo
terra1.recuper_temperature();
terra2.recuper_temperature();
terra"n".recuper_temperature();

la premiere me parait plus simple a réalisé et plus flexible non?

C’est une question d’habitude et de principe.
Soit tu code en POO et tu fait des getter/setter, soit tu code “à la C” avec des structures.
L’un n’est pas plus simple que l’autre, ni même “mieux”.

Du reste tu peut très bien mettre des fonctions (constructeurs, …) dans une structure C++ vu que c’est une classe.

a la vue de ta reponse je pense que je vais me replonger dans le site du zero et qu'il va y avoir du boulot ! merci en tout cas ps: je vais certainement avoir beaucoup de question ! ;)

Tu n'auras pas vraiment à faire:

terra1.recuper_temperature();
terra2.recuper_temperature();
terra"n".recuper_temperature();

Car tu feras un tableau de poiteurs de classes avec un code du type

for (...)
  terra[i]->recup_temp()

Les pro pourront confirmer ? ;-)

bon je me suis commander les bouquins c et C++ car sur l'ordi c'est moins simple je trouve , pour le moment je me contente de me faire ma bibliotéque en C je verai aprés pour le C++. car les classe j'ai pas encor tout compris. mais les structure me permete de faire la meme chose a priorie et avec quelque enumeration sa clarifie le code ! mais merci !

vlp_arduino : pourquoi s’embêter à faire un tableau de pointeurs sur classe quand on peut faire un tableau d’objet.
Ça reviens à faire la même chose qu’un tableau de structure C en plus …

Version C :

struct {
  int toto;
  // ...
} MaStruct_t;

MaStruct_t monTableau[10];

for (int i = 0; i < 10; ++i)
  maFonction(monTableau[i].toto);

Version C++ orienté objet :

classe {
private:
  int toto;
  // ...
public:
  int getToto() { return toto; }
  // ...
} MaStruct;

MaStruct monTableau[10];

for (int i = 0; i < 10; ++i)
  maFonction(monTableau[i].getToto());

la version c c'est exactement ce que je fait ( les classe tjs pas compris pour l'instant :roll_eyes:)

question il y a t'il une limite a l'inclusion de structure dans des structure par exemple:

structur terra
{
mes variable//
structure mesure
structure reglage
}

pour avoir queque chose comme terra.mes.temperature par exemple

je suis pas sur d'etre claire mais bon :grin:

Ya pas de limite.

Tu peut même faire une structure d'unions de structures d'unions de variables et de struct d'union de variables. Non non j'essaye pas de t'embrouiller :grin:

c'est quoi union ? j'ai pas encor reçu les bouquin :grin:

Hello,

@skywodd, mais un tableau de Classe devra être défini en global dans ton code, non ?

Tandis que le tableau de pointeur de Classe sera déclaré dans la fonction de setup.

Après, je ne sais pas si ca change grand chose en mémoire très concretement...

Heloderma-kris: c'est quoi union ?

C'est une syntaxe en C (et C++) qui permet de "voir" une variables sous plusieurs types.

Exemple :

union {
  int a;
  char b;
  long c;
} Plop_t;

En mémoire cette chose fait la taille du type le plus gros (ici long) mais peut être accéder suivant plusieurs types.

Ça permet des codes avec des types très avancés, exemple :

union {
  unsigned char bytes[4];
  long value;
} SuperLong_t;

SuperLong_t l;

l = 0xFFFFFFFF;

l[0] = 0;
// l vaut maintenant 0xFFFFFF00

vlp_arduino: @skywodd, mais un tableau de Classe devra être défini en global dans ton code, non ? Tandis que le tableau de pointeur de Classe sera déclaré dans la fonction de setup. Après, je ne sais pas si ca change grand chose en mémoire très concretement...

Tout dépend de ce que tu veut comme visibilité pour tes classes !

Si elles ont pour but de durer toute le long du programme -> variable globale (ou locale static), sinon -> variable locale. Les tableaux de pointeur sur classes c'est utile que si tu fait de l'allocation dynamique, sinon dans tout les autres cas c'est réalisable autrement.