派生类在构造时的顺序问题
class A{
A() = default ;
A( some parameters ){ print ("A"); }
}
class B: public A {
B( some parameters ): A( some parameters ) { print("B"); };
}
可以确定的是:
B的base部分先被构造,然后才是B的派生类部分被构造完成
有疑问的是:
究竟是B的构造函数先被调用还是B的构造函数中的A( some parameters )先被调用?
根据C++ Primer 第五版书中所写(页码位置待补充)
应该是A( some parameters )先被调用
问题来了,如果B没有被调用,some parameters是怎么传入A( some parameters )中的呢?
根据实验,确实是"A"比"B"先打印出来
那么怎么理解这种矛盾呢?
只能说明 构造函数初始化列表 不算是“调用”
构造函数初始化列表算是发生在函数调用前,是一种准备工作
其中的思想也许类似循环,循环开头可能有一些初始化和循环条件,符合条件才会“进入”循环
在做这些初始化和检查循环条件时,不算是“进入”了循环
真正走到B的构造函数的花括号当中的时候,才算是“调用”了
以上为个人理解
网上也有相反观点认为书中的陈述就是错的

浙公网安备 33010602011771号