Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include <conio.h> #include <iostream> using namespace std; //Erstmal die Standardklasse deklarieren class stdClass { protected: int Membervariable; public: void Memberfunktion() { cout << "Membervariable aufgerufen!" << endl; } }; //Jetzt kommt die Modifizierte stdClass an die Reihe class KlasseMitErbgut : stdClass { protected: int ZweiteMemvervariable; public: void ZweiteMemberfunktion() { cout << "ZweiteMemberfunktion aufgerufen!" << endl; } KlasseMitErbgut() { stdClass(); Membervariable = 2; int ZweiteMembervariable = 3; } }; int main() { KlasseMitErbgut *pTestklasse = new KlasseMitErbgut; pTestklasse.ZweiteMemberfunktion(); // 'ZweiteMemberfunktion' has not been declared getch(); // request for member of non-aggregate type before '(' token return 0; } |
Mastermind
unregistriert
Quellcode |
|
1 2 |
KlasseMitErbgut *pTestklasse = new KlasseMitErbgut; pTestklasse.ZweiteMemberfunktion(); |
Community-Fossil
Zitat von »"HighligerBimBam"«
Du rufst im Konstrukur den Konstruktor der stammklasse auf, dies ist falsch. Auch empfehle ich dir einen virtuellen destruktor für die stammklasse.
Quellcode |
|
1 2 3 4 5 6 |
KlasseMitErbgut() : stdClass() { Membervariable = 2; int ZweiteMembervariable = 3; // <-- hier ist übrigens nochn fehler, du verdeckst die membervariable } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <conio.h> #include <iostream> using namespace std; //Erstmal die Standardklasse deklarieren class stdClass { protected: int Membervariable; public: void Memberfunktion() { cout << "Membervariable aufgerufen!" << endl; } virtual ~stdClass() {} //brauchst du momentan nicht aber sobald du einen destruktor in KlasseMitErbgut hast }; //Jetzt kommt die Modifizierte stdClass an die Reihe class KlasseMitErbgut : stdClass { protected: int ZweiteMemvervariable; public: void ZweiteMemberfunktion() { cout << "ZweiteMemberfunktion aufgerufen!" << endl; } KlasseMitErbgut() { //hier nicht den Konstruktor der Stammklasse aufrufen Membervariable = 2; ZweiteMembervariable = 3; // nicht nochmal deklarieren, ist doch schon deklariert! } }; int main() { KlasseMitErbgut *pTestklasse = new KlasseMitErbgut; pTestklasse->ZweiteMemberfunktion(); // pfeil statt punkt! getch(); return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#include <iostream> //using namespace std; // nein, ganz sicher nicht in einem Header //Erstmal die Standardklasse deklarieren class stdClass { //protected // Kapselung ist auch bei Vererbung erwünscht private: int Membervariable; public: explicit stdClass ( int n = 0) : Membervariable ( n ) {} void SetMember ( int m ) { Membervariable = m; } // setter und getter. Aber die bräuchtest du hier nicht mal int GetMember () const { return Membervariable; } void Memberfunktion() { std::cout << "Membervariable aufgerufen!" << std::endl; } virtual ~stdClass() {} }; class KlasseMitErbgut : public stdClass { private: int ZweiteMemvervariable; public: void SetMember ( int m ) { ZweiteMemvervariable = m; } int GetMember () const { return ZweiteMemvervariable; } void ZweiteMemberfunktion() { std::cout << "ZweiteMemberfunktion aufgerufen!" << std::endl; } KlasseMitErbgut() : stdClass ( 2 ), // aufruf des Basiskonstruktors ZweiteMemvervariable ( 3 ) // initialisierung {} }; int main() { KlasseMitErbgut *pTestklasse = new KlasseMitErbgut; pTestklasse->ZweiteMemberfunktion(); delete pTestklasse; // nicht vergessen! return 0; } |
Mastermind
unregistriert
Zitat
// Kapselung ist auch bei Vererbung erwünscht
Zitat von »"Mastermind"«
Zitat
// Kapselung ist auch bei Vererbung erwünscht
Kapselung impliziert auch dass man nicht "auf Verdacht" für alles get und set mitliefert, sondern nur dort wo es wirklich benötigt wird.
Zitat von »"drakon"«
C-/C++-Quelltext
1 int GetMember () const { return Membervariable; }
Werbeanzeige