Klassen ausgeben

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
gamma
Beiträge: 33
Registriert: Sa Aug 20, 2016 11:30 am

Klassen ausgeben

Beitrag von gamma » Di Jan 24, 2017 2:07 pm

Ich habe eine recht einfache Frage zu Klassen. Ich lerne erst programmieren und verstehe nicht ganz, wie die Klassen funktionieren.

Code: Alles auswählen

using namespace std;

class Hunde
{
	public:						//Klasse Hund soll Größe, Länge und Gewicht beinhalten.
	Hunde(int Grose, int Laenge, int Gewicht){
	groese = Grose;
	laenge = Laenge;
	gewicht = Gewicht;
	}


	private:
	int groese;
	int laenge;
	int gewicht;
};



int main()
{

int g,l,gw;

	cin>>g;
	cin>>l;
	cin>>gw;

	Hunde Rex{g,l,gw,}; //Rex soll zur Klasse Hunde gehören. Ihm werden über die Konsole Parameter gegeben. Die   Größe möchte ich dann wieder ausgeben lassen.

	
	cout<<Rex.g;


return 0;

}
Mir ist klar dass das Programm wenig Sinn macht, jedoch wüsste ich gern, wie ich die Größe von Rex ausgeben kann? Ich bekomme die Fehlermeldung "class Hunde' has no member named 'g' cout<<Rex.g;". Wenn ich allerdings schreibe Rex.groese, bekomme ich die Fehlermeldung das groese private ist. Kann ich nicht durch: groese = Grose darauf zugreifen?
Danke schon mal für die Hilfe!
Edit by cloidnerux: quote in code Tags umgewandelt
Edit by dani93: "Kassen ausgeben" -> "Klassen ausgeben"

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Kassen ausgeben

Beitrag von cloidnerux » Di Jan 24, 2017 2:18 pm

Ich bekomme die Fehlermeldung "class Hunde' has no member named 'g' cout<<Rex.g;".
Was auch sinn macht, denn deine Klasse "Hunde" hat auch keinen "Member"(Klassenvariable) mit dem Bezeichner "g", der Bezeichner heißt "groese". Hier gilt wie immer, der Compiler ist sehr dumm und weiß nicht, was du machen willst. Er macht nur das, was er auch versteht.
Wenn ich allerdings schreibe Rex.groese, bekomme ich die Fehlermeldung das groese private ist
Auch das ist logisch, denn du hast "groese" als "private" deklariert:

Code: Alles auswählen

  [...]
private:
   int groese;
   int laenge;
   int gewicht;
};

Die "private", "protected" und "public" Spezifizierer haben den sinn, die Erreichbarkeit von Variablen und Funktionen einzuschränken. Wenn du eine Variable oder Funktion als "private" kennzeichnest, sagst du deinem Compiler, dass diese Variable nur innerhalb der Klasse verwendet werden soll und damit von außen nicht erreichbar ist. Dies ist wichtig, denn so schützt du dich vor dich selber.
Wenn du auf die Variable zugreifen willst hast du verschiedene Optionen. Entweder kennzeichnest du die Variable als "public", damit zugreifbar von außen

Code: Alles auswählen

[...]
public:
   int groese;
private:
   int laenge;
   int gewicht;
};
oder du definierst Funktionen zum Abrufen oder setzen der Variable(getter und setter):

Code: Alles auswählen

class Hunde
{
   public:                  //Klasse Hund soll Größe, Länge und Gewicht beinhalten.
   Hunde(int Grose, int Laenge, int Gewicht){
   groese = Grose;
   laenge = Laenge;
   gewicht = Gewicht;
   }

   int getGroese(){return groese;}
   void setGroese(int g){groese = g;}

   private:
   int groese;
   int laenge;
   int gewicht;
};
Mehr dazu hier: https://www.proggen.org/doku.php?id=cpp:class:private
Redundanz macht wiederholen unnötig.
quod erat expectandum

gamma
Beiträge: 33
Registriert: Sa Aug 20, 2016 11:30 am

Re: Kassen ausgeben

Beitrag von gamma » Di Jan 24, 2017 2:58 pm

Vielen danke für die exakte Antwort. Das erklärt mir einiges!

Antworten