You must explicitly call the base copy constructor:
Teacher(const Teacher& other) : Person(other)
Otherwise, the default constructor of Person will be called.
I do not seem to fully understand the question, so Iโll just say everything that, in my opinion, is relevant, and I hope this helps the OP.
All user-defined constructors use their default base constructor by default (unless they explicitly called another constructor), it does not matter if the default base constructor is user-defined or a compiler is generated.
When the copy constructor is generated by the compiler, it calls the copy constructor of the base class.
Constructors defined by a specific compiler are not special; they can be called explicitly:
class Base { int num_ public: Base(int n) : num_(n) { }
See the Wikipedia article for more details.
Motti source share