I've said this about 3 times now: You've overloaded the default constructor, which means the compiler will not generate one. The constructor you specified requires an argument. Since the compiler is unable to determine the argument of the base-class constructor, the derived class must specify the argument for the constructor. For example:
Yeah, I was just getting mixed up with the meaning of the default constructor. I thought it meant the constructor that automatically called on creation if there is no explicit call. Turns out it means a constructor that can be called with no arguments, which makes sense in your cases.
So in the last piece of code, the second one is the constructor that is automatically called (because there is no other constructor that takes no arguments), but it cannot be called because of the incorrect parameter.
Yes. Since ObjectB's trivial default constructor (the constructor that takes no arguments) has been overloaded, ObjectBmust be given an int in order for it to construct an object. However, you give the int parameter a default argument (like the one in ObjectC), you don't need to pass an int when you construct an object because the compiler will use the default int.