TStream - Abstrakte Klasse???



  • Burkhi schrieb:

    Ups; Junix war schneller 😃

    Aber deine Antwort war freundlicher und fachgerechter. 😃



  • [EDIT]

    @dschensky: mir ist leider ein Fehler unterlaufen. Ich wollte auf den Beitrag antworten, hab aber aus versehen auf "Editieren" geklickt und dein Beitrag überschrieben. Sei bitte nicht böse, war keine Absicht 🙄

    Kannst du diesen Beitrag ncoh mal editieren und wieder herstellen ?



  • dschensky schrieb:

    und mach Dich über abstrakte Klassen und (wie in der CBuilder-Hilfe zu TStream::TStream erwähnt) rein virtuelle Methoden schlau.

    naja, du meinst wahrscheinlich rein virtuelle Klassen, welche aber keine abstrakte Klassen implizieren. Virtuelle Methoden sind immer virtual, weshalb "rein virtuelle Methoden" natürlich eine expizite Ausdrucksweise einer impliziten Notwendigkeit darstellt.



  • Andreas,

    AndreasW schrieb:

    naja, du meinst wahrscheinlich rein virtuelle Klassen...

    nein, ich meine rein virtuelle Methoden.

    AndreasW schrieb:

    ...welche aber keine abstrakte Klassen implizieren.

    Ich denke doch:

    Stroustrup, Abschnitt 12.3 schrieb:

    Eine Klasse mit einer oder mehreren rein virtuellen Funktionen ist eine abstrakte Klasse.

    Bsp.:

    class X
    {
        void foo() = 0;
    }
    

    foo ist eine rein virtuelle Methode und demzufolge X eine abstrakte Klasse.

    AndreasW schrieb:

    Virtuelle Methoden sind immer virtual...

    Ich denke, das kann man so stehen lassen ... 🙂

    AndreasW schrieb:

    ...weshalb "rein virtuelle Methoden" natürlich eine expizite Ausdrucksweise einer impliziten Notwendigkeit darstellt.

    Also da ich gerade 3 Bier im Kopf habe, versuche ich morgen darüber nachzudenken ... 🙂



  • @dschensky... ich glaube dein Beispiel ist schlicht falsch (o;

    -junix



  • junix,

    junix schrieb:

    @dschensky... ich glaube dein Beispiel ist schlicht falsch

    Stimmt, ich habe natürlich das virtual vergessen.

    class X 
    {
        virtual void foo() = 0;
    }
    


  • dschensky schrieb:

    class X 
    {
        virtual void foo() = 0;
    }
    

    Also, meines Erachtens ist das ein Interface. Eine abstrakte Klasse muß mindestens eine rein virtuelle Methode besitzen, hat im Normalfall aber auch
    implementierte Methoden (die folglich nicht rein virtuell sein können).
    Besitzt eine Klasse ausschließlich rein virtuelle Methoden, spricht man von
    einem Interface. Dies trifft auf obige Klasse doch wohl zu.

    Gruß,

    Alexander



  • Eigentlich wollte ich nur wissen, wie ich eine Instanz der Klasse TStream erzeugen kann, da man mir sagte, dass ich eine abgeleitete Klasse verwenden muss, wie z.B. TFileStream, etc. ist meine Frage beantwortet. Danke an dieser Stelle, und ruhet in Frieden 😃



  • @dschensky:
    abstrakt ist nicht gleich virtual. Abstrakte Funtkionen implizieren aber virtuelle Methoden, da sonst ja nie ne Instanz einer abstrakten Klasse erstellt werden können, da die vermeindlich nicht virtuelle Methode ja nie überschrieben werden kann. Deshalb ist eine abstrakte Methode immer virtual.



  • Hi,
    ich habe das Gefühl, daß wir uns irgendwie alle einig sind, uns aber in komplizierten Formulierungen verwurschteln.
    Also: Die CB-Hilfe zu TStream::TStream sagt, TStream kann nicht instanziiert werden, weil deren Deklaration rein virtuelle Funktionen enthält. Was nicht drin steht ist, daß TStream damit eine abstrakte Klasse ist.
    Das ist es, was ich sagen wollte. Hier nochmal ein Zitat (bitte nicht wieder weg-editieren :-)):

    Stroustrup, Die C++ Programmiersprache schrieb:

    Eine Klasse mit einer oder mehreren reinen virtuellen Funktionen nennt man abstrakte Klasse; von abstrakten Klassen dürfen keine Objekte erzeugt werden.

    - kurz und schmerzlos.

    AndreasW schrieb:

    abstrakt ist nicht gleich virtual

    Das ist mir schon klar.



  • Der OT-Teil geht hier weiter.


Anmelden zum Antworten