创建一个对象时,会自动调用该对象所属类的构造函数。如果没有定义构造函数,编译器会自动生成一个默认的构造函数。
C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。
构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。
【考点】构造函数|默认构造函数|类对象创建
考纲定位:CSP-J/S 基础语法与面向对象模块,GESP 六级必考。命题人卡住的是"默认构造函数"这一隐性知识点——很多考生以为"构造函数=必须定义",其实编译器会补全。这题考察的是对 C++ 标准中默认构造函数生成机制的理解,属于基础但易错点。
解题思维:看到"创建对象"先想"对象出生时刻",此时执行构造函数;若无定义,编译器按语法规范自动补一个"什么都不做"的默认构造函数。因此题干描述完整,正确。关键观察是"如果没有定义构造函数"这一条件,触发编译器生成默认构造函数。
陷阱拆解:错误选项 B 常见套路是偷换概念——把"构造函数必须显式定义"当真理;或混淆"构造函数"与"析构函数"(析构是对象销毁时调用)。题干中"自动生成"是绝对化表述,但符合 C++ 标准,若改成"一定会调用带参数的构造函数"就错。此外,若类中已有带参构造函数,编译器不会再生成默认构造函数,这也是易错点。
反命题思维:如果把条件改为"若类只有带参构造函数,则编译器仍生成默认构造函数",答案变 B,因为此时默认构造函数被隐式删除。刷题时先问:命题人想考我"构造函数默认生成"还是"构造函数参数规则"?