下列关于 C++ 类的说法,错误的是( )。
C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。
构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。
【考点】C++类继承|抽象类定义|虚函数表
1.🎯考纲定位 本题考查 C++ 类继承与抽象类的核心概念。命题人卡住考生对纯虚函数与类实例化关系的理解——抽象类只能定义指针/引用,不能定义对象,但成员变量与虚函数并无冲突。
2.🧠解题思维 逐项推理:A 正确,派生类内存必包含基类数据及虚函数表指针;B 正确,派生类可选择不重写基类虚函数;D 正确,含纯虚函数即抽象类,无法实例化。C 错得离谱——抽象类的定义只限制实例化,与成员变量存储位置毫无关系,变量完全可以存在于抽象类中。
3.🪤陷阱拆解 陷阱在 C 项的偷换概念——抽象类只能定义指针/引用是正确的,但命题人故意混淆"实例化"与"成员存储"。如果你只背"抽象类不能定义对象"的结论,看到 C 项就下意识认为"不能定义成员",就会掉进这个语言陷阱。
4.🔄反命题思维 反命题视角:若改成"若类无纯虚函数,则能定义对象",答案会变吗?不会,因为定义对象的条件是"不含纯虚函数",与成员变量无关。刷到类似题,先问自己"命题人想考我什么",是考抽象类定义、虚函数重写、还是内存布局?