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.
- Einenon-virtual function
kann nicht überschrieben, sondern nur verdeckt werden.
- Hat eine Klasse min. einepure 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.
-
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?
-
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 { ... };