Why is a derived class constructor forced to call a base class constructor in C++ (either implicitly or explicitly)?
For example:
#include <iostream>
struct B1 {
B1() { std::cout << "B1"; }
};
struct B2 {
B2(int x) { std::cout << "B2"; }
};
struct D1: B1 {
D1() { std::cout << "D1"; } // implicitly calls B1::B1
};
struct D2: B2 {
D2(int x): B2(x) { std::cout << "D2"; } // explicitly calls B2::B2
};
int main() {
D1 d1 {}; // prints B1D1
D2 d2 {5}; // prints B2D2
return 0;
}