Private Membervariablen einer Klasse benutzen?
-
Hallo Com!
Ich probiere seit gestern in die Objektorientierung von C++ einzusteigen und habe ein kleines Problem mit Klassen. Der Autor von meinem Buch hat geschrieben, dass ich, wenn ich Klassen benutze, alle Membervariablen privat deklarieren soll.
Nun hab ich, nachdem ich mit mit dem Source Code im Buch beschäftigt habe, selber ein wenig heran getastet und muss zugeben, ich bin ein wenig überfordert, weil der Compiler eine Fehlermeldung nach der anderen ausspuckt.
#include <iostream> using namespace std; class Krieger { //Private Membervariablen private: int staerke; int intelligenz; public: //Auf die privaten Membervariablen zugreifen void ZeigeDaten(); }; void Krieger::ZeigeDaten() //Funktion definieren { cout << "Staerke: " << staerke << endl; cout << "Intelligenz: " << intelligenz; Krieger A; Krieger B; A.intelligenz = 15; A.staerke = 20; B.intelligenz = 40; B.staerke = 60; } int main () { ZeigeDaten(); //Funktion aufrufen - klappt nicht cin.get(); return 0; }Es wurde geschrieben, dass man, wenn man private Membervariablen deklariert, diese nur über eine Funktion in Anspruch nehmen kann.
Der Compiler sagt mir aber immer und immer wieder, dass diese Funktion nicht definiert ist.Würde mich über ein Ratschlag freuen!
-
Nein, so funktionieren Klassen nicht. Alles privat zu machen ist ja löblich, aber du hast anscheinend nicht verstanden, wozu Klassen überhaupt gut sind oder wie der Ansatz funktioniert. Du möchtest wohl eher:
#include <iostream> using namespace std; class Krieger { private: int staerke; int intelligenz; public: void ZeigeDaten(); Krieger(int s, int i) // eigentlich würde man hier eine Initialisierungsliste benutzen, kommt sicher bald { // Aber ich setze die variablen mal von Hand: staerke = s; intelligenz = i; } }; void Krieger::ZeigeDaten() { cout << "Staerke: " << staerke << endl; cout << "Intelligenz: " << intelligenz; } int main () { Krieger A(20, 30); Krieger B(50, 60); A.ZeigeDaten(); B.ZeigeDaten(); }
-
Der Compiler sagt mir aber immer und immer wieder, dass diese Funktion nicht definiert ist.
Natürlich, denn das ist sie nicht. Merke dir: Der Compiler hat fast immer Recht, also höre auf ihn.
Auch hier. Die Funktion ist als eine Memberfunktion der Klasse deklariert, also nicht global. Du musst erst ein Objekt der Klasse erstellen und über dieses die Memberfunktion aufrufen; wie SeppJ in seinem Beispiel zeigt.
Sonst ist die Funktion nicht "sichtbar".
Daher rate ich dir, OOP nochmal im Buch zu studieren - bzw. weiter vorne noch einmal ein zweites mal anzufangen.
-
Das hat mir enorm weiter geholfen, ich hatte Klassen in der Tat ziemlich falsch aufgegriffen. Zur Sicherheit werde ich das Kapitel aber noch mal von vorne durch gehen.
Vielen Dank ihr beiden
!