Du bist nicht angemeldet.

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

11

04.05.2013, 20:05

Das Prinzip der Vererbung oder der Instanziierung scheint dir noch nicht ganz klar zu sein.
Die Basisklasse stellt lediglich die Variablen, Pointer und Funktionen für die erbenden Klassen zur Verfügung, um dir Schreibarbeit zu sparen.
Ach keine Ahnung. Irgendwo ist bei dir vom Verständnis des Ganzen der Wurm drin.
Die erbenden Klassen haben die selben Funktionen wie die Basisklasse, die es auch separat auszuführen gilt.... Wie eine 'normale' Klasse, nur, dass du dir, mit den erbenden Klassen, Schreibarbeit gespart hast. Normal müsstest du ja die Funktionen und Variablen alle nochmal hinschreiben.
Jedes Fahrzeug hat bspw. einen Tank, eine bestimmte Anzahl von Rädern, Türen, ...
Statt nun jedes mal "hinschreiben" zu müssen, dass der LKW Reifen hat, ne Tür und 'nen Tank und das Auto eben auch, fasst man das ganze eben zu einer Klasse zusammen, zu einer gemeinsamen Menge von gemeinsamen Eigenschaften.
Ich erkenne dein Problem nicht :hmm:

MfG
Check

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

12

04.05.2013, 20:11

Wenn du schreibst

C-/C++-Quelltext

1
2
Enemy* enemy = new NormalEnemy();
Enemy* enemy2 = new BossEnemy();

und in Enemy die Funktion getRect() implementiert ist, dann kannst du einfach mit

C-/C++-Quelltext

1
2
Rect r = enemy->getRect();
Rect r2 = enemy2->getRect();

das Rect holen, unabhängig davon, welche Klasse jetzt dahinter steckt.

TigerClaw25

unregistriert

13

04.05.2013, 20:13

LOL, das ist mir mehr als klar!

Aber es ist nunmal so, wenn ich die Klasse, die erbt aufrufe, dass dann logischerweise diese von der Basisklasse erbt. Alles schön und gut. Aber wenn ich ausserhalb dieser Klasse mir ein Rect von der Basisklasse hole, was absolut nichts mit der KLassendeklaratio zutun hat, was hat dieses Rect dann mit der Klasse, die erbt zutun?


Basisschiff (Basisklasse)
Ufo (Erbt von Basisschiff)


in der Main erzeuge ich mir eine Instanz von Basisschiff -> Hat nichts mit Ufo zutun. Dann hole ich mir das Rect -> hat nichts mit Ufo zutun

Erzeuge ich mir jedoch eine INstanzt von Ufo, wird logischerweise auch der Konstruktor der Basisklasse bla bla aufgerufen.

Was wer wir erbt ist mir klar! Aber wenn ich eine INstanz der Basisklasse in einer anderen Klasse wie Game oder direkt in der main deklariere, dann hat das nichts damit zjtun, welche Klasse von dieser erbt. Außer es ist anders herum!

TigerClaw25

unregistriert

14

04.05.2013, 20:15

Ja, das kann ich tun, aber genau diese Schreibarbeit wollte ich vermeiden. Ich muss ja dann in meiner Kollision auch r2 berücksichtigen und bei 30 Gegnertypen habe ich trotzdem eine große Funktion ...

Muss zwar nicht jeden Gegner einzeln prüfen, aber dennoch alle Rects irgendwie in die Abfrage einbinden :( und wenn ich mehrere Rects habe, muss ich diese trotzdem durch eine Schleife oder sonstz wie durchgehen:

C-/C++-Quelltext

1
2
3
4
5
6
while (ItEnemy != m_EnemyList.end ())
    {

        list<CShot> *ShotListEnemy = ItEnemy->GetShotList ();
// Rect des Gegners holen
        RectEnemy= ItEnemy->GetRect ();


Bei mehreren Rects hätte ich dann auch mehrere Zuweisunfgen. Also müsste ich laut deiner Anweisung so vorgehen:

RectEnemy= ItEnemy->GetRect ();
RectEnemy2= ItEnemy2->GetRect ();

15

04.05.2013, 20:23

Ach, dir ist das wirklich mehr klar?

Zitat

Alles schön und gut. Aber wenn ich ausserhalb dieser Klasse mir ein Rect von der Basisklasse hole, was absolut nichts mit der KLassendeklaratio zutun hat, was hat dieses Rect dann mit der Klasse, die erbt zutun?

Scheinbar nämlich nicht. Es hat rein gar nichts mit der Basisklasse zu tun und du kannst das Rect so behandeln, als sei es von der erbenden Klasse, also in der erbenden deklariert worden.
Abr schlichtweg denke ich, dass du schlicht Probleme hast, den Umstand zu beschreiben und so irgendwas schreibst, was nicht dem entspricht.
Wenn du eine Instanz deiner Basisklasse machst, dann hat diese Instanz natürlich nichts mit "Ufo" zu tun. Dazu müsstest du separat Instanzen oder eine Instanz von Ufo anlegen.
Beide Klassen sind voneinander zu trennen, Basisschiff ist eine Klasse und Ufo ist eine Klasse, die beide nichts miteinander zu tun haben, außer dass Ufo durch das Basisschiff an Schreibarbeit abspeckt.
Sehr salopp.
Behandle Ufo einfach wie eine normale Klasse... Mach Instanzen von und führe die Funktionen aus.
Durch die Vererbung kannst du alle erbenden Klassen jedoch noch in einen Container unter der Basisklasse packen. Also bspw. std::vector<Basisschiff> und so für alle äußerst bequem die Funktionen ausführen lassen.
.Schwer das Ganze zu schreiben ohne potentielle Verwirrungen auszuschließen und trotzdem "alles" zu nennen. Aber zu viel ist ja auch zu viel.

MfG
Check

TigerClaw25

unregistriert

16

04.05.2013, 20:30

Vllt drücke ich mich auch falsch aus ... Aber wie ich das Prüfe weiß ich trotzdem nicht ...

In meiner Spawn Enemy erzeuge ich auch ein Basisschiff CEnemy Enemy.

Für das erbende Schiff müsste ich zusätzlich die Funktion SpawnUfo hinzufügen ... komme ja nicht drum rum ...

17

04.05.2013, 21:26

Indem du einfach über der Instanz von UFO deine Prüffunktion aufrufst...

MfG
Check

TigerClaw25

unregistriert

18

04.05.2013, 22:13

Und wenn ich Ufo, raumgleiter xyz, xyz2 etc. Habe? Dann habe ich viele Instanzen und viele Abfragen

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

04.05.2013, 22:41

Nein, hast Du nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TigerClaw25

unregistriert

20

04.05.2013, 22:47

Und wie pruefe ich in meiner Game Klasse alle Objekte wie Ufo, Raumgleiter, Bomber etc.?

Mehr Instanzen = mehr Abfragen, oder wie pruefe ich die Instanzen sonst? Ueber dike Rects der Basisklasse, die die unterklassen erben.

Werbeanzeige