+ 1
Value of member variable in multiple inheritance
Hi Please refer class D which is inherited from B and C As D's constructor gets called last post all base classes, 3 is expected to get for a in case D has constructor Question is about value of a if D constructor is commented I was expecting output 2 but it prints 0..why? B constructor sets a as 1 and then c should set to 2 but why output is 0? If D has been inherited like D : public C, public B Output should be 1.? Is this correct ? https://code.sololearn.com/cKkgvSg6agzo/?ref=app
9 Réponses
+ 1
This should help you:
https://en.wikipedia.org/wiki/Virtual_inheritance
0
Yeah I am aware about diamond problem and virtual inheritance..
My concern is about constructor calls.... If object d is not calling constructors if B and C, isn't it a bad thing ? What if these two classes manages resources via constructor
0
I have different perspective to look at this as below :
C is derived from A and hence variable a of A is accessible to C. Variable is still in A and just available to C object as well due to inheritance
Now as soon as C constructor gets called , variable of struct A is assigned to 2...
I hope inheritance of D from C forces D' default constructor to call C's default constructor which should set value of a to 2
I feel that value should be 2. Is it not true ?
0
Also if I just remove virtual from struct c declaration and D just gets inherited from C alone, I got 2 as output as expected without D constructor uncommented
Does this means due to virtual inheritance, C and B constructors don't get called ? Dimaond problem forced us to use virtual inheritance but it is having flaw of not calling inheritance heircrchy constructors
Isn't it ?
0
Basic question : why constructor not called for struct C even though D obj is created
Rest all are the work around and not much interested... Also value of a is not main concern for me.
I just want to understand that c constructor should get caled or bit for object of D ?
0
I just updated a line into c struct constructor...
It seems c constructor getting called and prints hi as well
Now another question: why a is not modified and prints value 0?