在 C++ 中,关于类的继承和构造、析构顺序,下列说法正确的是( )。
C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。
构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。
【考点】类的继承|构造与析构顺序|访问权限
1. 🎯 考纲定位 GESP 八级「面向对象程序设计」模块核心考点,也是本级别唯一专门考察继承生命周期顺序的题目。命题人专抓那些「背会语法但不懂初始化与清理顺序」的考生——基类必须先构造、派生类后构造,基类后析构、派生类先析构,是区分真懂与假懂的试金石。
2. 🧠 解题思维 C++ 对象构造时先初始化基类成员(基类构造),再初始化派生类成员(派生类构造);销毁时相反。这源于基类数据必须先就位,派生类才能使用,因此 C 正确。该规则对任意继承链都成立,是面向对象语言的生命周期铁律。
3. 🪤 陷阱拆解 A 错:private 成员永远只在本类可访问;B 错:私有继承下基类 protected 成员会变为派生类的 private,不会变 public;D 错:析构函数调用顺序与构造相反,先派生后基类。这些是命题人利用「继承修饰符与访问权限关系」设下的经典坑,学生若只背结论就会掉进去。
4. 🔄 反命题思维 若把「私有继承」改成「公有继承」,B 选项的结论将变为真;若把「创建对象」改成「调用虚函数」,则考察的是虚析构与多态。刷到同类题先问:「这里考的是继承类型还是构造顺序?」