Schlüsselwort virtual;



  • Aso damit kann ich dann einen Object auf die Methoden eines anderen Objectes zugreifen lassen. Wenn natürlich die Methode dann virtual ist



  • Cho++ schrieb:

    Aso damit kann ich dann einen Object auf die Methoden eines anderen Objectes zugreifen lassen. Wenn natürlich die Methode dann virtual ist

    Kann mal einer übersetzen 😕

    - Hat eine Klasse min. eine virtual function , verhält sie sich polymorph.
    - Eine non-virtual function kann nicht überschrieben, sondern nur verdeckt werden.
    - Hat eine Klasse min. eine pure virtual function , nennt sie sich abstrakte Basisklasse.



  • Gugelmoser schrieb:

    abstrakte Klasse.

    Sag: abstrakte Basisklasse. Denn wenn du schon keine Instanzen erstellen kannst, willst du ja ableiten, oder etwa nicht?

    P.S.: Seit C++11 gibt es noch das schöne Schlüsselwörtchen final . Google das mal.

    Edit: Ach, und nochwas:

    #include <iostream>
    
    struct base
    {
        virtual void bar() { std::cout << "base::bar\n"; }
    };
    
    struct derived : public base
    {
        void bar() { std::cout << "derived::bar\n"; }
    };
    
    int main()
    {
        derived d;
        base& binst = d;
    
        binst.bar();
        binst.base::bar();
    }
    


  • Hacker schrieb:

    Gugelmoser schrieb:

    Sag: abstrakte Basisklasse. Denn wenn du schon keine Instanzen erstellen kannst, willst du ja ableiten, oder etwa nicht?

    Stimmt. Es war auch mal davon die Rede (ich glaube pumuckl wars), dass abstrakte Klassen ausschließlich als Basisklassen vorkommen sollten.



  • Wo ist final?

    [quote:923f93410a="Working Draft, Standard for Programming
    Language C++ / N3242=11-0012 / Page 24 "]alignas continue friend register true
    alignof decltype goto reinterpret_cast try
    asm default if return typedef
    auto delete inline short typeid
    bool double int signed typename
    break do long sizeof union
    case dynamic_cast mutable static unsigned
    catch else namespace static_assert using
    char enum new static_cast virtual
    char16_t explicit noexcept struct void
    char32_t export nullptr switch volatile
    class extern operator template wchar_t
    const false private this while
    constexpr float protected thread_local
    const_cast for public throw



  • Zeus schrieb:

    Wo ist final?

    Wikipedia schrieb:

    Note that neither override nor final are language keywords. They are technically identifiers; they gain special meaning only when used in those specific contexts. In any other location, they can be valid identifiers.


  • Mod

    Zeus schrieb:

    Wo ist final?

    Da hat er sogar Recht, Kapitel 10.3



  • Ahh, tut mir Leid. Jedenfalls kann man sie benutzen.



  • SeppJ schrieb:

    Zeus schrieb:

    Wo ist final?

    Da hat er sogar Recht, Kapitel 10.3

    Seltsam im ersten Augenblick - aber ich seh doch richtig, dass das final nur in Bezug auf die Funktion spezifiziert werden kann und nicht auf die Klasse?


  • Mod

    Zeus schrieb:

    Seltsam im ersten Augenblick - aber ich seh doch richtig, dass das final nur in Bezug auf die Funktion spezifiziert werden kann und nicht auf die Klasse?

    Ja.



  • Okey ich habs verstanden! Und mit dem Schlüsselwort final z.B vor einer virtuellen
    methode. Kann man diese ja nicht mehr überschreiben aber trotzdem als virtuelle funktion verwenden.



  • Zeus schrieb:

    Seltsam im ersten Augenblick - aber ich seh doch richtig, dass das final nur in Bezug auf die Funktion spezifiziert werden kann und nicht auf die Klasse?

    Du meinst, dass man von einer Klasse nicht erben kann? Das geht auch.

    class foo final { ... };
    

Anmelden zum Antworten