View Single Post
Her var det mye dårlig praksis. Siden dette er et eksempel fra læreren din, så antar jeg at han har bakgrunn fra C og har lært seg C++ uten å sette seg ordentlig inn i det.

Det du prøver å skrive ut i 'void skrivTopper()' funksjonen er klassen selv. Dette hadde fungert om du har en statisk konstant variabel med navn 'toppene' på innsiden av klassen topp, som er en array. Men utfra oppgaven å tolke, så ønsker du å skrive ut navnet på toppene fra 'Topp' instansene 'toppene'. Men siden 'navn' er deklarert som en 'private' klasse attribute på innsiden av klassen 'Topp', så må du implementere 'Topp::skrivNavn()' metoden først.

Kode

void Topp::skrivNavn()
{
    cout << this -> navn << endl;
}
For så å etter på implementere funksjonen 'void skrivTopper()'

Kode

void skrivTopper() {       //  Skriver ALLE toppene:
	for (int top = 1; top < (MAXTOPPER + 1); top++) {
		toppene[top].skrivNavn();
	}
}
C++ har mange og bedre måter både å håntere stringer på, som 'std::string' og kontainere til å håndtere arrays, som 'std::array', 'std::list', 'std::vector' o.l. Noe som gjør håndteringen av disse objektene mye mer trivielt. Hvorfor læreren din har valgt å bruke 'char []' (char arrays) til strings og rå arrays til å lagre instansene av 'Topp' må du nesten spørre han om.

I tillegg så virker det litt som han har missforstått prinsippen med OOP (Objekt Orientert Programmering) og ansvar området til de enkelte metodene. Blant annet så har han deklarert «les» og «skriv» metoder fra std(in/out) og filer inn i både klasssen Topp og Etappe. Det hadde vært en mye bedre praksis å implementere «getters» og «setter» i disse klassene og heller laget eksterne funksjoner eller eksterne klasser til å ta seg av jobben med å fylle opp og skrive ut data fra disse.