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
HLSL-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 |
class CBall { public: void Ballfunktion(); }; void CBall::Ballfunktion(); class CSpieler { public: void Spielerfunktion(); }; void CSpieler::Spielerfunktion(); class CGame { public: void SpielerBallFunktion(); }; void CGame::SpielerBallFunktion() { CSpieler::Spielerfunktion(); CGame::Ballfunktion(); } //main Funktion CGame Game; // nur eine Instanz // Die finale Funktion Game.SpielerBallFunktion(); |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Daedra22« (18.06.2013, 10:21)
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 |
class TestKlasse { public: void MachWas() {} // Etwas sinnlos da hier ja nichts passiert aber das ist unwichtig }; int Main() { TestKlasse normaleInstanz; // Eine "normale" Instanz TestKlasse *dynamischeInstanz; // Ein Zeiger auf eine Instanz // Zugriff auf Member der normalen Instanz normaleInstanz.MachWas(); // Zugriff auf die Instanz auf die der Zeiger zeigt durch den * Operator. Danach kann normal über den . Operator auf die Member zugegriffen werden (*dynamischeInstanz).MachWas(); // Eine vereinfachte Schreibweise ist der -> Operator. dynamischeInstanz->MachWas(); return 0; } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Schorsch« (18.06.2013, 14:18) aus folgendem Grund: Fehler im Code korrigiert. Danke Evrey.
C-/C++-Quelltext |
|
1 |
TestKlasse dynamischeInstanz; // Ein Zeiger auf eine Instanz
|
C-/C++-Quelltext |
|
1 |
TestKlasse* dynamischeInstanz; // Ein Zeiger auf eine Instanz |
C-/C++-Quelltext |
|
1 2 3 4 |
int main(int _argc, char** _argv) noexcept { asm volatile("lock cmpxchg8b %eax"); return 0; } // ::main |
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 58 59 60 |
//Oberklasse Tier class CTier { public: void Leben(); }; void CTier::Leben() { cout<<"ich leben"<<endl; } //Unterklasse Haustier class CHaustier { public: void Streicheln(); void Können(); CTier *hTier; }; void CHaustier::Streicheln() { cout<<"Mich kann man streicheln"<<endl; } void CHaustier::Können() { Streicheln(); hTier->Leben(); } // untere Unterklasse Katze class CKatze { public: void Kuscheln(); void Können();CKatze();~CKatze(); CHaustier *kHaustier; }; CKatze::CKatze(){ kHaustier= new CHaustier;} CKatze::~CKatze(){delete kHaustier;} void CKatze::Kuscheln() { cout<<"Ich kann kuscheln"<<endl; } void CKatze::Können() { Kuscheln(); kHaustier->Können(); } //main Funktion Katze.Können(); |
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »Daedra22« (19.06.2013, 23:56) aus folgendem Grund: Init durch Konstruktor und Destruktor verändert
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 58 59 |
//Oberklasse Tier class CTier { public: void Leben(); }; void CTier::Leben() { cout<<"ich leben"<<endl; } //Unterklasse Haustier class CHaustier // du musst hier erben class CHaustier : public CTier { public: void Streicheln(); void Können(); // sollte virtual sein, da du sie in CKatze ja überschreiben willst CTier *hTier; // unnötig! }; void CHaustier::Streicheln() { cout<<"Mich kann man streicheln"<<endl; } void CHaustier::Können() { Streicheln(); hTier->Leben(); // du kannst hier doch auch einfach Leben() schreiben. } // untere Unterklasse Katze class CKatze // ebenfalls erben class CKatze : public CHaustier { public: void Kuscheln(); void Können();void Init(); CHaustier *kHaustier; // wofür brauchst du hier einen pointer? }; void CKatze::Init(){new kHaustier;} // unnötig! und sowas kompilert? o.O macht für mich keinen Sinn :P void CKatze::Kuscheln() { cout<<"Ich kann kuscheln"<<endl; } void CKatze::Können() { Kuscheln(); kHaustier->Können(); // willst du "Können" der Basisklasse aufrufen, schreibst du CHaustier::Können(); Hier wird kein Pointer gebraucht! } //main Funktion CKatze Katze;Katze.Init(); // warum Katze.Init() ? wenn du bei der Erstellung einer Instanz eine Funktion aufrufen möchtest, schreib einen Konstruktor (CKatze::CKatze()) Katze.Können(); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Tier { // ... }; class Haustier:Tier // Haustier erbt von Tier { // ... }; class Katze:Haustier // Katze erbt von Haustier, also ist Katze Haustier und Tier { // ... }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
std::list<Tier*> tiere; tiere.pushback(new Tier()); tiere.pushback(new Haustier()); tiere.pushback(new Katze()); // ... |
Nur so als kleine Stielhilfe. Kann aber jeder machen wie er will. Ausserdem, Wenn du eine große Klasse haben willst empfehle ich dir dafür auch eine neue .hpp Datei anzulegen. Ist später übersichtlicher.
C-/C++-Quelltext
1 2 3 4 5 6 //Oberklasse Tier class CTier // <- Das C vor der Klasse ist nicht sonderlich nötig, mach es einfach so: Variablen grundsätzlich klein schreiben, Namen von Funktionen klein anfangen rest Groß: doThis und Klassennamen einfach normal: Tier { public: void Leben(); // Bei kleinen Klassen bietet es sich an die Funktionen direkt in der Klasse zu definieren };
Werbeanzeige