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 |
#include <iostream> #include <string> using namespace std; class C_Raumschiff { public: string m_Name; void RaumschiffBenennen(C_Raumschiff *RaumschiffName); }; class C_Jaeger: public C_Raumschiff { public: int m_Energie; }; void C_Raumschiff::RaumschiffBenennen(C_Raumschiff *RaumschiffName) { string Name; cout << "Raumschff benennen: \n"; cin >> Name; RaumschiffName->m_Name = Name; } int main() { C_Raumschiff *MeinRaumschiff = NULL; MeinRaumschiff = new C_Jaeger; MeinRaumschiff->RaumschiffBenennen(MeinRaumschiff); cout << "Name des Raumschiffes: \n"; cout << MeinRaumschiff->m_Name; } |
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 |
#include <iostream> #include <string> using namespace std; class C_Raumschiff { public: string m_Name; void m_RaumschiffBenennen(C_Raumschiff *RaumschiffName); }; class C_Jaeger: public C_Raumschiff { public: int m_Energie; C_Jaeger() { m_Energie = 100; cout << "Jaeger erstellt" << endl; } }; void C_Raumschiff::m_RaumschiffBenennen(C_Raumschiff *RaumschiffName) { cout << "Raumschiff benennen" << endl; string Name; cin >> Name; RaumschiffName->m_Name = Name; } void RaumschiffErstellen(C_Raumschiff *NeuesRaumschiff) { NeuesRaumschiff = new C_Jaeger; NeuesRaumschiff->m_RaumschiffBenennen(NeuesRaumschiff); } int main() { C_Raumschiff *MeinRaumschiff = NULL; RaumschiffErstellen(MeinRaumschiff); cout << "Name vom Raumschiff: "; cout << MeinRaumschiff->m_Name << endl; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Raumschiff { public: string name; void benennen() { cin >> name; } }; int main() { Raumschiff schiff; schiff.benennen(); cout << schiff.name; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
void erstellen(Raumschiff** schiff) { *schiff = new Jaeger; (*schiff)->benennen(); } int main() { Raumschiff* schiff; erstellen(&schiff); cout << schiff->name; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
// Beispiel: Raumschiff* schiff = new Jaeger; ((Jaeger*)schiff)->energie = 100; // Oder gleich: Jaeger* schiff = new Jaeger; schiff->energie = 100; |
Hat ich glatt vergessen, hier war ich mir nicht sicher wie es richtig ist .Zitat
Oh, also der Parameter der Memberfunktion ist eigentlich sinnlos. Mach sie entweder statisch, sodass du dafür kein Objekt brauchst und lass den Parameter, oder, wie ich es machen würde, entferne einfach den Parameter und benenn immer das Objekt, dessen Funktion du gerade aufrufst:
Ok, danke dafürZitat
Zu deinem eigentlichen Problem mit dem Erstellen: Da du ja den Zeiger neu setzt aber in der Funktion immer nur eine Kopie hast, musst du einen Zeiger auf den Zeiger übergeben.
Mit Energie meinte ich sowas wie Laserenergie für Geschosse, hätt ich vielleicht im Beispiel auch so benennen sollenZitat
Wieso hat ein Raumschiff keine Energie? Der Jaeger sollte diesen Member gleich von Raumschiff erben, dann wäre es logischer und einfacher.
Auch einmalig machen für einen Zeiger?Zitat
C-/C++-Quelltext
1 2 3 4 5 6
// Beispiel: Raumschiff* schiff = new Jaeger; ((Jaeger*)schiff)->energie = 100; // Oder gleich: Jaeger* schiff = new Jaeger; schiff->energie = 100;
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Rexona for men« (24.07.2011, 18:50)
Community-Fossil
Mit Energie meinte ich sowas wie Laserenergie für Geschosse, hätt ich vielleicht im Beispiel auch so benennen sollen
(Da ich auch Raumschiffe erstellen möchte, die sowas nicht besitzen sollen.)
Spielt hier aber keine Rolle, war nur zum Zeigen, was ich meinte. Der Code sollte auch nicht logisch sein sonder zeigen, was ich meinte .
Ohja, das hätte eigenlich private sein müssen .Zitat
In welchen Situationen musst du von außen auf die Energiewaffenenergie zugreifen? Ich denk nicht, dass du es brauchst.
Ich war auf die Idee gekommen, den Raumschifftyp erst zur Laufzeit festlegen zu müssen, aber ja, mit virtuellen Methode muss ich aufjedenfall auch noch was machen .Zitat
Wie wäre es wenn du dich ein bisschen mit Polymorphie (genauer virtuellen Methoden) beschäftigst bevor du mit Zeigern auf die Basisklasse arbeitest?
Ups, nächstes Mal denk ich dran, versprochen!Zitat
edit: Achja, bitte den angeforderten Speicher auch in Beispielen freigeben. Das muss sich ins Gehirn einbrennen!
Community-Fossil
Ohja, das hätte eigenlich private sein müssen .Zitat
In welchen Situationen musst du von außen auf die Energiewaffenenergie zugreifen? Ich denk nicht, dass du es brauchst.
Nächste Frage, ich weiß dass es auf normalen Weg nicht geht, aber wie greife ich auf die Membervariable m_Energie zu?
Werbeanzeige