Klassen und Objecte
-
Hey @ all ,
bin neu hier und ich hoffe ich hab das richtige Forum erwischt

Lerne nun schon etwas C++ , und will damit auch nicht so schnell aufhören,
nun bin ich bein Klassen und Objecten angekommen. Habe auch verstanden wie man sie deklariert und definiert aber ein unter Kapitel macht mir doch ganz schön zu schaffen. Nämlich Private und Public , in einer Klasse ist ja wenn man es nicht angibt alles Privat und in meinem Buch wurde nun Öffentliche Zugriffsfunktionen erklärt , nur leider verstehe ich dies nicht so ganz , vorallem mit der Variable übergabe an die einzelnen Elementvariablen und funktionen .#include <iostream.h> class ausgabe { public: int SetZahl(int ausgabe_zahl); private: int zahl; }; int ausgabe::SetZahl(int ausgabe_zahl) { ausgabe_zahl = zahl; return ausgabe_zahl; } int main() { ausgabe ausgeben; ausgeben.SetZahl(5); cout << ausgeben.SetZahl(); system("pause"); }.... das ist mal ein Beispiel von mir .. könnt ihr vielleicht ein bisschen erklären wie ich das anstelle mit der Übergabe der richtigen Variablen (Parameter) ..
Ich benutze dieses Buch :
http://informit.de/books/c++21/data/start.htm
( Es ist Tag 6) .. nur Leider finde ich es ein wenig zu unausführlich geschrieben in diesem Kapitel.
Hoffe mir kann jemand helfen , da ich alleine nicht mehr weiter komme
MFG
Toa
Edit : ich weiß das ich die cout ausgabe noch altmodisch mache , normalerweiße benutzt man ja iostream da dies eine neuere Bib ist ..
-
hmm ok ein gaanz einfaches Beispiel
class a { // private! Default einer class public: // public => Jeder kann auf die Funktion des Objektes zugreifen void set_variable(const int variable) { m_variable = variable; } private: // private => Nur Funktion innerhalb des Objektes können drauf zugreifen int m_variable; // so kannst du auch verhindern das jemand was an der Variable ändert, was dazu führen würde, das der Rest deiner Klasse nicht mehr funktioniert ... protected: // von a erbende Klassen können auf die folgenden Sachen zugreifen. };...
=>int main() { a inst; // default-konstruktor wird genommen ... a.m_variable = 10; // GEHT NICHT! a.set_variable(10); // GEHT! }
-
RIeßen Dank sowas hab ich gebraucht , da weiß ich welche Variablen mit welchen Übereinstimmen müssen , noch ma Big Thx !!! Ich hau mich wieder aufs Bett weiter lernen ,.. Immer mit meinem Ziel vor Augen

MFG Toa
-
Hallo,
das Beispiel ist etwas merkwuerdig. Du hast keine Get-Methode, um an den Wert
zu kommen.BTW: Das mit cout ist schon richtig so.
Mit Klassen kapselst du Daten und diese Daten sind private, weil der Benutzer
der Klasse diese lediglich ueber ein definiertes Interface benutzen soll.Man koennte sich zum Speichern eines Bruches z. B. folgende Klasse schreiben:
class Fraction { private: int numerator; int denumerator; public: Fraction(const int& n, const int& d) : numerator(n), denumerator(d) {} int get_numerator() { return numerator; } int set_numerator(const int& n) { numerator = n; } int get_denumerator() { return denumerator(); } int set_denumerator(const int& d) { denumerator = d; }Mit Hilfe der set-Methoden kannst du die Werte entsprechend setzen.
Fraction fraction(4, 5); //ctor aufruf => numerator = 4, denumerator = 5 cout<<fraction.get_numerator()<<"/"<<fraction.get_denumerator()<<endl; //wir wollen einen anderen Bruch, z. B. 3/4 fraction.set_numerator(3); fraction.set_denumerator(4); //und wieder ausgeben cout<<fraction.get_numerator()<<"/"<<fraction.get_denumerator()<<endl;Warum der Umweg ueber Methoden? Unter Umstaenden willst du noch irgendwelche
Ueberpruefungen machen, um die der Benutzer nicht drum herum kommen soll. Z. B.
die Pruefung, ob 'denumerator' auf 0 gesetzt wird (was nicht zulaessig waere).gruss
v R
-
So ich hab jetzt
#include <iostream.h> class ausgabe { public: int zahl_ausgabe(int variable) { zahl=variable; return variable; } private: int zahl; }; int main() { ausgabe die_ausgabe; ausgabe.zahl_ausgabe(10); }Aber Compiler bringt mir den Fehlr Expected Primary Expression befor ´.´ bei
ausgabe.zahl_ausgabe(10);Aber es stimmt doch alles ? ..
-
Du musst mit dem Objekt arbeiten, welches du angelegt hast.
ausgabe eine_ausgabe;Instanziiert ein Objekt vom Typ 'ausgabe'. Dein Objekt wird nur ueber
'eine_ausgabe' referenziert und damit arbeitest du auch.Korrekt muesste es also heissen:
eine_ausgabe.zahl_ausgabe(10);BTW: Du solltest eine extra get- und set-Methode schreiben. Denn immer wenn
du etwas ausgeben willst, ueberschreibst du es zunaechst mit einer neuen Wert.gruss
v R
-
Sorry für den Fall das ich eventuell nerve ,
aber irgendwie klappts net obwohl ich jetzt schon ziemlich viel richtig gemacht hab meiner Meinung nach xD
#include <iostream.h> class ausgabe { public: int SetZahl(int variable); int GetZahl(); private: int zahl; } int ausgabe::SetZahl(int variable) { zahl=variable; } int ausgabe::GetZahl() { return zahl; } int main() { ausgabe eine_ausgabe; eine_ausgabe.SetZahl(10); cout << eine_ausgabe.GetZahl(); }
-
Definiere "klappt nicht". Gibt es irgendwelche Fehler? Bitte angeben

gruss
v R
-
Also es kommen folgende fehlermeldungen
Zeile 16 : new types may not be defined in a return type
Zeile 16 : extraneous int ignored
Zeile 16 : prototyp for ausgabe ausgabe::SetZahl(int) does not match any in class ausgabe
Zeile 7: candidate is : int ausgabe::SetZahl(int)
Zeile 16 : ausgabe ausgabe::SetZahl(int) and int ausgabe::SetZahl(int) cannot be overloaded
-
Die Klassendeklaration muss mit einem Semikolon abgeschlossen werden. Ausserdem
solltest du den Rueckgabetyp der set-Methode in void umaendern.gruss
v R
-
ohh haaa danke , wenn ich groß bin will ich auch so gut Proggen können wie du , mir is grad aufgefallen das du schon Seit 2000 hier bist ,.. du musst ziemlich gut sein. Hab leider erst jetzt mit C++ angefangen und vorher meine Zeit mit Qbasic vergoldet ..
...
-
Toa schrieb:
ohh haaa danke , wenn ich groß bin will ich auch so gut Proggen können wie du , mir is grad aufgefallen das du schon Seit 2000 hier bist ,.. du musst ziemlich gut sein. Hab leider erst jetzt mit C++ angefangen und vorher meine Zeit mit Qbasic vergoldet ..
...Noe, hat nix mit gutsein zu tun. Nur sind das so Fehler, die man im Laufe seiner
Jahre natuerlich auch selbst oft genug gemacht hat, daher schaut man direkt
erstmal auf diese Art von Fehler ;).Das ich seit 2000 hier bin, sagt ja nix ueber die Qualitaet meiner Beitraege oder
mein koennen aus.gruss
v R