#include <iostream>
class A {
public:
A() {
std::cout << "A constructor" << std::endl;
}
~A() {
std::cout << "A destructor" << std::endl;
}
};
class B : virtual public A {
public:
B() {
std::cout << "B constructor" << std::endl;
}
~B() {
std::cout << "B destructor" << std::endl;
}
};
class C : virtual public A {
public:
C() {
std::cout << "C constructor" << std::endl;
}
~C() {
std::cout << "C destructor" << std::endl;
}
};
class D : public B, public C {
public:
D() {
std::cout << "D constructor" << std::endl;
}
~D() {
std::cout << "D destructor" << std::endl;
}
};
int main() {
D d;
return 0;
}