In reply to Alex K.:
“super” is used to access what you would have inherited had you not defined the same identifier in the current class.
The constructor of C creates one instance(object), an instance of a C type. That instance includes all the members inherited from B and A class types. So A::i, B::i, and C::i all exist as separate variables in a C instance.
I didn’t assign any values to the variables in my example, but I could have given each one of them a different value.
Please note it is usually a poor programming practice to give names to variables in an extended class that already exist in the base class type. Normally this name override is done with class methods only.