Let's look at the following code:
class A{ protected: int _val; public: A(){printf("calling A empty constructor\n");} A(int val):_val(val){printf("calling A constructor (%d)\n", val);} }; class B: virtual public A{ public: B(){printf("calling B empty constructor\n");} B(int val):A(val){printf("calling B constructor (%d)\n", val);} }; class C: public B{ public: C(){printf("calling C empty constructor\n");} C(int val):B(val){printf("calling C constructor (%d)\n", val);} }; int main(void) { C test(2); }
Output:
calling A empty constructor calling B constructor (2) calling C constructor (2)
Can someone explain to me why the class A constructor is called without any arguments? Additionally, how can I βfixβ this behavior if I want class B to actually inherit from A? (If inheritance is not virtual - the sample works fine)
Wojciech danilo
source share