下列关于 C++ 类的说法,错误的是( )。
C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。
构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。
【考点】构造函数调用顺序|虚析构函数|多态性
GESP 七级必考继承体系,命题人专考"构造函数链式调用"这一易被忽视的底层机制,卡住那些只懂语法却不懂对象构造流程的考生。
看到选项 B 这种"只调用派生类构造函数"的绝对化表述,立刻意识到违反构造顺序铁律——派生类对象必须先初始化基类部分,基类构造函数必然执行,否则基类成员将处于未初始化状态。
选项 A 的陷阱在于"虚析构函数"是 C++ 唯一正确做法,但很多人误以为只要基类有析构函数就行;选项 C 的陷阱在于虚函数表机制,派生类对象通过基类指针调用基类虚函数时,虚函数表指针仍指向基类表,因此能调基类实现;选项 D 的陷阱在于基类指针可以指向派生类对象,这是指针兼容性的基本常识。
把 B 改成"构造派生类对象时,基类构造函数先于派生类构造函数执行"就是正确命题,可见命题人正是利用考生对构造顺序的模糊认知设下陷阱。