Polymorphie in C++ (Polymorphie in C++), Lektion, Seite 722388
https://www.purl.org/stefan_ram/pub/polymorphie_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

Polymorphie und virtuelle Funktionen in C++ 

(Diese Lektion ist nur eine kurze Notiz und noch nicht ausformuliert.)

example

struct base { virtual int f() const { return 0; }}

struct derived_a : base { int f() const override { return +1; }}

struct derived_b : base { int f() const override { return -1; }}

Wann braucht man Laufzeit-Typen?

Man liest vom Benutzer etwas ein, das eine Zahl oder  ein Text sein kann.

Man durchstreift einen binären Baum, und die linke oder rechte Seite kann ein Baum oder  ein Atom sein.

main.cpp

#include <initializer_list>
#include <iostream>
#include <memory>
#include <ostream>

struct B
{ void n() const;
virtual void v() const ;
virtual ~B(); };

void ::B::n() const { ::std::cerr << "::B::n\n"; }

void ::B::v() const { ::std::cerr << "::B::v\n"; }

B::~B() = default;

struct D : public B
{ void n() const;
void v() const override;
~D() override; };

void ::D::n() const { ::std::cerr << "::D::n\n"; }

void ::D::v() const { ::std::cerr << "::D::v\n"; }

D::~D() = default;

int main()
{ ::D const d;
::B const * b = &d;

b->n();
b->v(); ::std::cerr << '\n';

d.n();
d.v(); ::std::cerr << '\n';

b->::B::n();
b->::B::v(); ::std::cerr << '\n';

d.::D::n();
d.::D::v(); ::std::cerr << '\n'; }

Protokoll

::B::n

::D::v

::D::n

::D::v

::B::n

::B::v

::D::n

::D::v

F:\r\j\autocomp\main.cpp:8:8: warning: 'B' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [clang-diagnostic-weak-vtables]

struct B

^

F:\r\j\autocomp\main.cpp:19:8: warning: 'D' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [clang-diagnostic-weak-vtables]

struct D : public B

^

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722388 stefan_ram:722388 Polymorphie in C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722388, slrprddef722388, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/polymorphie_c++