Lets 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);
}
The output is:
calling A empty constructor
calling B constructor (2)
calling C constructor (2)
Could somebody explain to me why the A class constructor is called without any arguments? Additional how can I "fix" this behaviour if I want the B class to inherit virtually from A? (If the inheritance is not virtual - the sample works fine)