Hej.
Jeg har et problem med Class protection.
Eksempel på mit problem:
tv.h
Class Tv
{
public:
void setKanal(int);
private:
int kanal;
};
Denne klasse er nu oprettet og den eneste vej, jeg kan ændrer i kanal, er igennem setKanal(int) korrekt?
Næste klasse
fjernbetjening.h
Class Fjernbetjening
{
public
void run(void);
Tv * tvPtr;
};
Denne klasse har via en pointer adgang til public funktioner i Tv korrekt?
Tv.cpp
void Tv::setKanal(int skiftkanal)
{
kanal = skiftkanal;
}
fjernbetjening.cpp
void Fjernbetjening::run()
{
tvPtr->setKanal(2);
}
main.cpp
#include <iostream>
using namespace std;
int main()
{
Fjernbetjening remote;
remote.run();
}
Nu er mit spørgsmål. Dette stykke kode vil køre således:
Den opretter et objekt af klassen fjernbetjening og kalder metoden run
i run, vil den kalde nyKanal i klassen Tv via tvPtr, som giver adgang til klassen Tv.
kanal vil efter denne rutine få værdien 2?
Jeg har uladt constructor osv. i ovenstående eksempel, da disse ikke giver relevans for eksemplet.
Jeg får ingen fejl i det kode jeg compiler (ikke samme kode, blot et eksempel på sammenspil mellem klasser), men når den når til mit sammenspil mellem 2 klasser, som i eksemplet tvPtr->setKanal(2);
Så melder den en kritisk fejl og stopper programmet. Jeg har fundet ud af, det ikke er selve kaldet, men i linjen hvor jeg skriver til variablen jeg tilgår gennem min pointer. Altså vil den melde fejl ved kodelinjen
kanal = skiftkanal;
Kan dette være rigtigt?