YvesD
Achtergrond: Ik ben het eens met alle opmerkingen hierboven en die blijven ook geldig als je de code die ik hier plaats gebruikt. Wat ik hier aanlever als code is niet "hoe ik het zou doen" maar "hoe ik je makkelijkst duidelijk kan maken "hoe het beter/makkelijker kan"
Als ik je code zie -en ik bedenk dat je pas begonnen bent- zou ik voorstellen om class te gebruiken inplaats van struct.
Technisch gezien is een struct -in C++- een class waar geen methoden kunnen ingevuld worden en waar alle members public zijn.
Jouw code letterlijk vertaald naar class geeft.
class HeatClass
{
public:
long wisselTijd;
long loopTijd;
long wissel;
long heatTijd;
long race;
long raceWissels;
float wisselDecimal;
float looptijdDecimal;
float raceDecimal;
float racewisselsDecimal;
char wisselTxt[6];
char heatTxt[7];
char racewisselsTxt[8];
char racelooptijdTxt[8];
};
..
HeatClass Heat[8];
//---- initialiseren loopTijd(en) ----
Heat[0].loopTijd = 0;
Heat[1].loopTijd = 0;
Heat[2].loopTijd = 0;
Heat[3].loopTijd = 0;
Heat[4].loopTijd = 0;
Heat[5].loopTijd = 0;
Heat[6].loopTijd = 0;
Heat[7].loopTijd = 0;
Als je echter class functionaliteit gebruikt kan het ook zo.
class HeatClass
{
public:
long wisselTijd;
long loopTijd;
long wissel;
long heatTijd;
long race;
long raceWissels;
float wisselDecimal;
float looptijdDecimal;
float raceDecimal;
float racewisselsDecimal;
char wisselTxt[6];
char heatTxt[7];
char racewisselsTxt[8];
char racelooptijdTxt[8];
HeatClass(){loopTijd = 0;};
};
HeatClass Heat[8];
En dit doet echt letterlijk hetzelfde.
Een class kan een speciale methode hebben met dezelfde naam als de class zelf. Deze methode wordt opgeroepen als het object gemaakt wordt. met
HeatClass Heat[8];
Maak je 8 keer een object HeatClass aan dan wordt dus ook 8 keer
HeatClass(){loopTijd = 0;};
uitgevoerd.
Waarom is dit beter (volgens mij)?
Omdat je dan ook methoden kunt toevoegen. Ik zie bijvoorbeeld in je struct staan
char racewisselsTxt[8]; en long raceWissels;
waarschijnlijk is de racewisselsTxt een andere representatie van raceWissels. De 2 in sync houden is niet zo makkelijk met een struct. Elke keer als je raceWissels aanpast moet je ook racewisselsTxt aanpassen.
In een class kan je dat als volgt doen
class HeatClass
{
private:
long raceWissels;
public:
long wisselTijd;
long loopTijd;
long wissel;
long heatTijd;
long race;
float wisselDecimal;
float looptijdDecimal;
float raceDecimal;
float racewisselsDecimal;
char wisselTxt[6];
char heatTxt[7];
char racewisselsTxt[8];
char racelooptijdTxt[8];
void setRaceWissels(long newNumberOfRaceWissels)
{
raceWissels=newNumberOfRaceWissels;
racewisselsTxt=convertRaceWisselsToText(raceWissels);
}
long getRaceWissels(){return raceWissels;};
};
Ik heb raceWissels private gemaakt. Dat wil zeggen dat je niet meer aan raceWissels kan komen. In de code vertaalt zich dat als volgt: volgende code geeft een of meerder fout boodschappen voor elke lijn
Heat[7].raceWissels=12;
if(Heat[7].raceWissels<521)
maar als je het volgende schrijft komt het goed
Heat[7].setRaceWissels(12);
if(Heat[7].getRaceWissels()<521)
En hier komt mijn punt .......
Ook al lijken deze 2 lijntjes heel goed op elkaar en zodanig is er dus geen enkele reden om naar een class te gaan .....
Maar....de eerste code (met de struct dus) heeft een functionele bug en de tweede code niet!!!
Denk er eens goed over na en selecteer daarna zone hieronder als je denkt et te weten
bij de eerste code is racewisselsTxt niet correct en bij de tweede code wel.
Dit komt omdat setRaceWissels zowel raceWissels als racewisselsTxt aanpast