在 C++ 语言中,类的构造函数和析构函数均可以声明为虚函数。
C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。
构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。
【考点】类与对象|构造函数与析构函数|虚函数
🎯 考纲定位:本题考查 C++ 语言规范的硬性要求,位于 GESP 大纲"类与对象"模块。命题人专挖"构造/析构是虚函数"的常见误区,90% 考生凭直觉误选 A。
🧠 解题思维:看到题先想"虚函数是做什么的"——它实现多态,依赖对象完全构造后的动态绑定。而构造函数在对象完全构造前就运行,析构函数在对象完全销毁后运行,两者都无法在运行时完成虚表查找,语法上直接禁止声明为 virtual。记住通法:构造函数与析构函数永远不是虚函数。
🪤 陷阱拆解:选项 A 是典型的"直觉陷阱"——误以为虚函数能覆盖构造/析构就能实现多态。命题人利用"虚函数=多态"的思维定式,让人忽略构造/析构的特殊时序。选项 B 正确,因为 C++ 标准明确规定构造函数和析构函数不能是虚函数。
🔄 反命题思维:如果把构造函数声明为 virtual 会怎样?编译器直接报错,这证明规则是绝对的。刷到类似题时,先问自己:"这个函数是在对象完全构造前还是后运行?"