Modernes C++ programmieren

Okt 23, 2024

lst-0495-godb.cpp

//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/s9xnn7c5j 
#include <iostream>
using std::cout;
struct Base { // abstrakte Klasse
  virtual void anbieter() = 0;
  virtual void nutzer() = 0;
};
struct Derived1 : public virtual Base { // noch abstrakt
  virtual void nutzer() override { anbieter(); }
};
struct Derived2 : public virtual Base { // noch abstrakt
  virtual void anbieter() override { cout << "Derived2::anbieter!\n"; }
};
struct DerivedDerived : public Derived1, public Derived2 { // konkret
};
int main() {
  DerivedDerived dd{};
  DerivedDerived *pdd = &dd;
  Derived1* pd1 = pdd; // Cast innerhalb der Hierarchie
  Derived2* pd2 = pdd; // Cast innerhalb der Hierarchie
  pdd->nutzer();       // Ausgabe: Derived2::anbieter()!
  pd1->nutzer();       // Ausgabe: Derived2::anbieter()!
  pd2->nutzer();       // Ausgabe: Derived2::anbieter()!
}