Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

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

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 < [ 2 ]
000
16.06.2004, 13:58 Uhr
Tommi Bisic



Hallo
Wieso wird der Destruktor meistens als virtual definiert?
Was sagt dieses virtual eigentlich aus?

Dieser Post wurde am 16.06.2004 um 13:59 Uhr von Tommi Bisic editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.06.2004, 14:19 Uhr
DerSchwarzeSchlumpf



www.fun-soft.de/showtopic.php?threadid=7611&time=1087388300

da steht eigentlich einiges darüber (:
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.06.2004, 14:20 Uhr
stephanw
localhorst


Hi !

Guckst Du z.B. hier (Suchfunktion !).
Im Grunde ist es beim Destruktor (Dtor) das gleiche, das Ziel ist, über einen Zeiger auf eine Basisklasse den _richtigen_ Destruktor für die abgeleitete Klasse aufrufen zu können, falls erfordelich (also beim delete).

edit: grrrr, zu langsam
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 16.06.2004 um 14:22 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.06.2004, 14:46 Uhr
Tommi Bisic



andere Frage,mag jetzt vielleicht blöd klingen aber wenn ich eine Klasse

C++:
class CPunkt
{
public:
      double dx;
      ............
};

habe und eine Klasse

class CStrecke
{
public:
     CPunkt P1;
     ......
};

und ich später im main

int main()
{
      CStrecke s;
      .......
      ......s.P1.dx
}


dieses s.P1.dx benutze ist es doch eigentlich auch eine Art der Vererbung
da ich mit der Instanz s auf die Instanz P1 der Klasse CPunkt zugreife und die Variable dx hole,oder liege ich da falsch?


Bearbeitung von typecast:
cpp-Tags gesetzt

Dieser Post wurde am 16.06.2004 um 15:06 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.06.2004, 15:07 Uhr
Tommix



Du liegst.
Vererbung wäre

C++:
class CStrecke: public CPunkt
{
};

int main()
{
  CStrecke s;
  s.dx = ...
}


So greifst Du lediglich auf eine Instanz von CPunkt zu, die sich innerhalb von CStrecke befindet. Geerbt hat CStrecke da nix.

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.06.2004, 15:41 Uhr
stephanw
localhorst


Vererbung ist das nicht. Aber Du hast grundsätzlich "recht" in dem worauf Du hinaus willst: In OOP gibt es verschiedene Formen um auszudrücken, wie bestimmte Klassen/Objekte in Beziehung stehen. Vererbung ist eine davon, Objekt-Komposition eine andere. Pauschal kann man nicht sagen, was besser ist. Auch im speziellen gibt es häufig mehr als eine Lösung, darüber gibt es viele Diskussionen, Meinungen etc. .
Allerdings ist "public"-Vererbung für nicht-triviale Programme auf keinen Fall auf die leichte Schulter zu nehmen, das hat u.U. äußerst weitreichende Konsequenzen, derer man sich (auch als Nicht-Anfänger) häufig nicht bewusst ist. Hierbei sind mal so Stichworte wie Vor- und Nachbedingungen, Invarianten, Ersetzungsprinzip usw. zu nennen... --> Literatur bzw. Google bemühen
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.06.2004, 16:11 Uhr
Tommi Bisic



OK, vielen Dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.06.2004, 17:04 Uhr
Tommi Bisic



Kann mir mal auch bitte jemand erklären, wozu ich eigentlich abstrakte Funktionen(Methoden) brauche?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
16.06.2004, 19:35 Uhr
0xdeadbeef
Gott
(Operator)


Wenn du bestimmte Prinzipien bzw. Interfaces definierst, die alleine keinen Sinn machen, aber nachher von anderen Klassen benutzt werden sollen, kannst du sie so alle über einen Kamm scheren. Beispiel:

C++:
#include <string>
#include <stringstream>

class IntParser {
public:
  virtual int parseInt(const std::string&) = 0;
};

class DecIntParser : public IntParser {
public:
  virtual int parseInt(const std::string &s) {
    //parst einen int aus einem String, in dem eine Dezimalzahl steht
  }
};

class HexIntParser : public IntParser {
  virtual int parseInt(const std::string &s) {
    //parst einen String, in dem eine Hexadezimalzahl steht
  }
};

// usw.
//dann später:
int useParser(IntParser p, const std::string &s) { return p.parseInt(s); }

//...

HexIntParser h;
std::cout << useParser(h, "0xdeadbeef") << std::endl;


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 16.06.2004 um 19:36 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
16.06.2004, 20:13 Uhr
Tommi Bisic



Rein theoretisch gesehen macht jede Funktion die nicht genutzt wird keinen Sinn.
Verzeih mir bitte, aber ich verstehe immer noch nicht ganz warum ich sie unbedingt brauche... :

Dieser Post wurde am 16.06.2004 um 20:13 Uhr von Tommi Bisic editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: