Möchte Wert einer Eigenschaft ausgeben
-
Achso, ich verstehe
Kannst du oder jemand anderes mit vielleicht auch die Frage mit dem B und BB erklären. Der Konstruktor initialisiert ja die Werte, aber kann man nicht einfach B schreiben???Ich hoffe, dass ich meine Frage versteht!!!
lg, freakC++
-
Ne, ich versteh sie nicht wirklich...Ich versuche mich mal an deinen Stil zu halten. Die Erklärung steht in den Kommentaren im Konstruktor
class TMyData { private: // membervariablen sollten PRIVATE sein float m_b; public: TMyData(float b); float show(); // const qualifying lass ich jetzt mal weg }; // ..... TMyData::TMyData(float b) : m_b(b) // besser sind Initialisierungslisten, als das Befüllen im Konstruktor { // anstelle der Initialisierungsliste geht auch folgendes // m_b = b; // ***** // ich denke, hier liegt dein Verständnisproblem. hierbei ist b // das Argument, aber m_b ist der Member. das sind zwei verschiedene // Dinge // ***** } float TMyData::show() { return m_b; }
-
mmhh....mir wird die Lösung klarer. Danke schonmal. Doch muss ich nochmal nachfragen: Warum nimmt man in deinem Beispiel nicht gleich B.
Ich glaub du hast das zwar schon erklärt, aber ich hab trotzdem noch nicht so ganz gerafft. Da ich noch nicht mit den Begriffen Argument und Member vertaut bin, muss ich die erstmal nachschauen, oder?
Herzlichen Dank
lg, freakC++
-
Hallo
Damit der Wert vom Parameter b in die Membervariable m_b kopiert wird ist eben entweder die Zuweisung oder die Initialisierungsliste notwendig. Wenn du keines von beiden nutzt dann hat das zwei Auswirkungen :
- der Wert von b bleibt ungenutzt und hat in der Klasse keine Auswirkungen mehr
- m_b bleibt uninitialisiert, d.h. hat einen vollkommen zufälligen WertMit Argument wird das Symbol gemeint, das dem Parameter einer Funktion beim Aufruf mit übergeben wird.
bis bald
akari
-
freakC++ schrieb:
mmhh....mir wird die Lösung klarer. Danke schonmal. Doch muss ich nochmal nachfragen: Warum nimmt man in deinem Beispiel nicht gleich B.
Ich glaub du hast das zwar schon erklärt, aber ich hab trotzdem noch nicht so ganz gerafft. Da ich noch nicht mit den Begriffen Argument und Member vertaut bin, muss ich die erstmal nachschauen, oder?
Herzlichen Dank
lg, freakC++Der Sinn der Klasse Variabel erschliesst sich mir auch nicht so ganz, ich denke er soll das Konzept von Klassen und Attributen vermitteln. Die Antwort auf die Frage, warum nicht B statt eines Objekts vom Typ TVariabel genommen wird hat vermutlich zwei Gründe:
- Einstieg in OOP und Erklärung der Begriffe/Konzepte Klassen und Attribute
- Bewahren von Werten über den Lebenszyklus einer lokalen Varible hinaus. Wirf einen Blick auf folgenden C++ Code:
void foo() { float B = 5; } void bar() { foo(); }
In dieser Funktion existiert B nur während der Ausführung der Funktion foo, die Funktion bar() ruft zwar foo() auf, hat allerdings keinen Zugriff auf irgendwelche Variablen innerhalb der Funktion foo. Angenommen foo() nimmt eine Benutzereingabe entgegen, die in bar() weiterverarbeitet werden soll. Wie also transportiert man jetzt diese Information von foo() nach bar() ? Die Lösung liegt darin, einen entsprechenden Datentyp zu definieren, eine Objekt davon zu erzeugen und dieses Objekt von foo() nach bar() zu transportieren. Das Ergebnis sähe dann etwa so aus:
TVariabel* foo() { float b = nimm_irgendwie_die_benutzereingabe_entgegen return new TVariabel( b ); } void bar() { TVariable* pVar = foo(); pVar->Zeige(); delete pVar; }
Funktionell ist der obige Code in Ordnung, allerdings eine konzeptionelle Katastrophe und so etwas sollte möglichst immer vermieden werden. Die Gründe dafür sind auf Einsteigerniveau oft nicht verständlich, da sie sich mit fortgeschritteneren Themen wie Object Ownership und Resource Acquistion/Handling beschäftigen. Im grossen und Ganzen dreht es sich dabei um die Frage, wem das erzeugte TVariable Objekt gehört und wer für dessen Zerstörung verantwortlich ist.
Lernst du gerade C++ aus einem Borland C++ Builder Buch?
Gruß,
Doc
-
Ja, ich hab son Buch und lern daraus eifrig, damit ich nicht mehr solche Fragen stellen muss
Warum fragst du??
lg, freakC++
-
Lies dir das mal durch, das ist sehr gut für Anfänger, damit hab ich auch angefangen.
-
Danke...ich werds mir auf jeden Fall anschauen. Trotzdem bevorzuge ich Bücher, da man dann nicht vom Internet abhängiger ist und was in der Hand hat.
Vielen dank für den Tipp
lg, freakC++
-
Jo Bücher sind gut, ich hab allerdings selbst festgestellt das Bücher ein schlechter Start sind da sie meist schon früh in gewisse Details gehen und keinen guten grundüberblick geben, der Fehler den du hast ist da zB ein gutes Beispiel für.
-
da hast du recht. Deswegen hab ich mich halt auch hier im Forum registriert, damit ich Fragen oder Kapitel, die ich nicht verstehe hinterfragen kann. Ich habe mir extra ein Buch gekauft, dass laut dem Titel für jeden geeignet ist (C++ für Kids). Ich hab es jetzt bald durch, doch ohne eure Hilfe hätte ich nicht so viel geschafft.
Auch bevorzuge ich OOP, da man damit sehr schöne Sachen machen kann.
lg, freakC++