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

Dave

Alter Hase

  • »Dave« ist der Autor dieses Themas

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

1

11.01.2005, 19:49

polymorphie

ich möchte ne abstrakte basisklasse erstellen, welche eine rein virtuelle methode init zum initialisirern besitzt.
die abgeleitete klasse soll dann die init-methode implementieren. jedoch möchte ich, dass die in der abgeleiteten klasse implementierte methode bereits im konstruktor der basisklasse aufgreufen wird.
die basisklasse soll also nicht nur ein interface zur verfügung stellen, sondern auch bereits das aufrufen der methoden übernehemen, sodass man init nur noch implementieren muss, um das verhalten festzulegen....

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
class Base
{
public:
    Base()              { /* hier soll Init aufgerufen werden */ }
    virtual void Init() = 0;
};

class Derived : Base
{
public:
    virtual void Init() { printf("Derived"); }
};


müsste doch eigentlich gehen, oder?

2

11.01.2005, 20:15

Joa...leider kann man im Konstruktor keine keine überschriebene Version einer virtuellen Methode aufrufen. Es wird immer die Implementation der selbigen Klasse genommen.

D.h. du wirst dich damit abfinden müssen die init()-Method separat aufzurufen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Dave

Alter Hase

  • »Dave« ist der Autor dieses Themas

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

3

11.01.2005, 21:08

das ja doof :-(

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

4

11.01.2005, 21:49

Kannst dus Problem vielleicht mal etwas allgeminer beschreiben? Warum soll das ganze denn über die "init"-Methode geschehen? Warum kann derjenige, der ableitet, den Code stattdessen nicht in seinen Konstruktor schreiben?

Aber natürlich findet sich für alles eine Lösung.

hmm...

OK, mal ein erster kranker Versuch:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Base { 
public: 
   Base(boost::function<void ()> init)
      : init(init)
   { init(); }

private:
    boost::function<void ()> init;
}; 

class Derived : public Base { 
public: 
   Derived ()
      : Base (boost::bind(boost::mem_fn(&myInit), this))
   {}

private:
   void myInit() { printf("Derived"); } 
};


Aber erzähl lieber mal, wofür du das brauchst. Wahrscheinlich findet sich da doch was besseres.

Werbeanzeige