kostenloser Webspace werbefrei: lima-city


Interfaces?

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    h******0

    Ich möchte gerne mit hilfe abstrakter klassen ein Interface realisieren. Muss ich da nun jede Klasse von dem Interface ableiten? Wenn ich aufs Iface zugreifen will, muss ich ne Referenz verwenden? oder einfach normal? :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hoster90 schrieb:
    Ich möchte gerne mit hilfe abstrakter klassen ein Interface realisieren. Muss ich da nun jede Klasse von dem Interface ableiten?

    Ja.

    Deine abstrakte Klasse definierst du folgendermaßen:
    class abstrakteKlasse
    {
    public:
    virtual int funktion1();
    virtual int funktion2();
    }

    Und die Ableitung ist dann

    class konkreteKlasse : abstrakteKlasse
    {
    public:
    int funktion1(){/*ueberschreibe funktion1*/}
    int funktion2(){/*ueberschreibe funktion2*/}
    }

    Wenn ich aufs Iface zugreifen will, muss ich ne Referenz verwenden? oder einfach normal? :)

    Normal.

    Ich habe es jetzt nicht getestet und ich bin mir nicht sicher, ob virtuelle Variablen/Funktionen immer überschrieben werden müssen.
    Jedenfalls definierst du eine abstrakte Klasse, indem du die Member virtual machst.


    Beitrag geändert: 10.7.2008 21:30:19 von bladehunter
  4. Ergänzung: Bin mir jetzt nicht sicher ob eine virtuelle Funktion allein schon reicht, damit die Klasse auch für den Cpompiler wirklich abstrakt wird (d.h., man kann keine Instanz davon erzeugen). Evtl. müssen alle Methoden virtual sein oder so, es gab da irgendeinen Kniff bei der Sache ^^

    Definitiv abstrakt machst du sie, indem du die Methoden auf Null setzt (eigentlich sollte eine, z.B. Konstruktor, ausreichen):

    class abstrakteKlasse
    {
    public:
    virtual int funktion1()=0;
    virtual int funktion2()=0;
    }

    Dann musst du jede Methode in der Spezialisierung implementieren, sonst gibt\'s böse Zugriffsfehler (bzw. der Compiler meckert) ;)

    MfG,
    thw
  5. nicolas-alessandro

    nicolas-alessandro hat kostenlosen Webspace.

    abstrakt gibts es nicht (wirklich) in c++...aber stören wir uns nicht an details...

    damit eine klasse wirklich \"abstrakt\", d.h. nicht instanzierbar ist, muss mindestens eine methode als pure virtual deklariert werden. Wird die methode nur als virtual deklariert, muss eine default implementation gemacht werden. Pure virtual methoden müssen dann zwingend in den abgeleiteten klassen implementiert werden.
  6. b********s

    es reicht auch wenn man nur eine Methode 0 setzt, glaube ich oder?
  7. p*********o


    es reicht auch wenn man nur eine Methode 0 setzt, glaube ich oder?


    Stimmt, eine Klasse wird abstrakt, wenn zumindest eine der Methoden =0 gesetzt wird.

    class Klasse {
        virtual foo()=0;
    }


    Was "virtual" angeht:
    http://de.wikipedia.org/wiki/Virtuelle_Methode

  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!