Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » virtual wird ignoriert

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.07.2007, 16:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi hab folgendes konstrukt:


C++:
class Base
{
   virtual ~Base() {}
   virtual void Function() = 0;
};

class A : public Base
{
   A() { Function(); }
   void Function() { echo "A" }
};

class B : public A
{
   B() : A() {}
   void Function() { echo "B" }
};



nun wird bei


C++:
B b;
b.Function()



A ausgegeben O.o
warum ignoriert er die vtable aus dem konstruktor raus?
--
class God : public ChuckNorris { };

Dieser Post wurde am 06.07.2007 um 19:07 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.07.2007, 16:47 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Also bei mir übersetzt das so nichtmal

Aber musst du A und B nicht Base ableiten?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.07.2007, 16:54 Uhr
Blubber2063



Würd mich auch mal interessieren wo hier die Ableitung ist.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.07.2007, 17:40 Uhr
Tommix



Du solltest nach dem freitäglichen Feierabendbier nicht mehr programmieren
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.07.2007, 19:07 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oops, habs korrigiert,

ist halt
Base -> A -> B

Ansonsten ist das natürlich etwas pseudocode (echo gibts ja so nich)
--
class God : public ChuckNorris { };

Dieser Post wurde am 06.07.2007 um 19:08 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.07.2007, 23:59 Uhr
Kest
saint


Hi!

Es liegt einfach nur daran, weil die Klassenerzeugung von unten nach oben wächst: zuerst werden die Basisklassen erzeugt, dann die abgeleiteten. Zuerst wird sie in A überschrieben und nur dann in B. Und in umgekehrter Reihenfolge zerstört. Ist eigentlich logisch.
Wenn aber B schon erzeugt ist, dann wird natürlich immer die von B aufgerufen, auch wenn man upcastst. (Außer man ruft sie explizit auf (A::)).
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 07.07.2007 um 00:00 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.07.2007, 12:26 Uhr
(un)wissender
Niveauwart


Eben, in Konstuktoren und Destruktoren ist das Aufrufen von virtuellen Methoden undefiniert.
Kest sagt schon warum, die vt ist halt noch nicht fertig.
Ist recht tricky, in der Realität passiert das schneller als man denkt. Habe mal mehrere Stunden gebraucht bis ich so einen Fehler gefunden hatte, obwohl ich das mit den virtuellen Methoden und den Konstuktoren wußte.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.07.2007, 12:54 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ja eigentlich ists ja irgendwo logisch - stimmt.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
09.07.2007, 07:40 Uhr
(un)wissender
Niveauwart


Nun Java umschifft dieses Problem indem Objekte teilgebaut werden. Also erstmal alle Admintätigkeiten über die Hierarchie und dann den Usercode im Konstruktor ausführen. Da klappt dann das Aufrufen der virtuellen Methoden.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: