面试题答案
一键面试-
构造函数调用顺序:
- 首先调用
A
的构造函数,输出A constructor
。因为C
类中有成员变量A a;
,在C
的构造函数执行前,会先构造其成员变量,A
类型的成员变量a
先被构造。 - 接着调用
B
的构造函数,输出B constructor
。C
类的成员变量B b;
在A
类型成员变量构造完成后被构造。 - 最后调用
C
的构造函数,输出C constructor
。
- 首先调用
-
常见调试手段:
- 使用
cout
打印信息:在每个构造函数中添加cout
语句,就像题目代码中已经做的那样,通过观察输出信息的顺序来确定构造函数的调用顺序。 - 使用调试器(如GDB):
- 设置断点:在
C c;
语句所在行以及各个构造函数内部设置断点。 - 启动调试:在命令行使用
gdb your_program
启动调试(假设程序名为your_program
)。 - 单步执行:使用
next
或step
命令单步执行代码,观察程序执行流程,在断点处查看调用栈,从而了解构造函数的调用顺序。
- 设置断点:在
- 使用IDE(如CLion、Visual Studio Code 等):
- 设置断点:在IDE的代码编辑器中,在
C c;
语句以及各个构造函数内部点击行号旁边设置断点。 - 启动调试:使用IDE的调试启动按钮启动调试会话。
- 观察调试信息:通过IDE的调试窗口,如调用栈窗口、控制台输出窗口等,查看构造函数的调用顺序和相关信息。
- 设置断点:在IDE的代码编辑器中,在
- 使用