不管有没有继承与成员对象,永远都是先调用本类的构造函数的。
只是在构造函数内部,执行第一个有效语句之前,会先调用基类的构造函数,再调用成员对象的构造函数,最后再执行本类构造函数内部的语句。
而构造函数内部做得事情包含(通常的实现是按这个顺序的):
需要注意的是,初始化虚表指针的时机在C++标准里是没有明确的规定的,所以 3 可能会被编译器实现放到 5 的后面。
由于这个原因C++标准明确规定了,在构造函数内,不允许发生多态的行为,也就是说如果有虚函数,必须要调用当前构造函数类的那个虚函数(即在基类构造函数中会调用基类的函数,在子类构造函数中会调用子类的函数)。