Modernes C++ programmieren

Okt 23, 2024

lst-0492-godb.cpp

//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/oc7jsbrEK 
#include <iostream>
using std::cout;
struct Base1 {
    virtual void f1() {}
};
struct Base2 {
    virtual void f2() {}
};
struct Derived : public Base1, public Base2 {
    virtual void g() {};
};
void vergleich(void* a, void* b) {
    cout << (a==b ? "identisch\n" : "unterschiedlich\n");
}
int main() {
    Derived d{};
    auto *pd = &d;
    cout << pd << '\n';       // zum Beispiel 0x1000
    auto pb1 = static_cast<Base1*>(pd);
    cout << pb1 << '\n';      // immer noch 0x1000
    auto pb2 = static_cast<Base2*>(pd);
    cout << pb2 << '\n';      // jetzt 0x1008 !
    cout << (pd==pb1 ? "gleich\n" : "verschieden\n"); // Ausgabe: gleich
    cout << (pd==pb2 ? "gleich\n" : "verschieden\n"); // Ausgabe: gleich
    vergleich(pb1, pd);       // Ausgabe: identisch
    vergleich(pb2, pd);       // Ausgabe: unterschiedlich
}