一般情况下,在 C++中定义一个类时,构造函数和析构函数都不是必须手动定义的。( )
这题考类成员函数的默认生成机制。拿到题先想:C++编译器对空类或无自定义构造/析构的类,会自动提供默认构造函数和默认析构函数,所以用户确实不必手动定义。
学生容易把‘构造函数不能是虚函数’的记忆与本题混淆,误以为构造函数必须显式写。其实本题只问‘是否必须手动定义’,默认生成的存在就足以让命题成立。若题目加‘有自定义构造函数’条件,答案才会变,这是同一考点的变体陷阱。
【考点】类定义|构造函数|析构函数|默认生成机制
C++ 面向对象的核心规则之一是:只要类中没有用户自定义的构造函数,编译器就会自动提供一个默认构造函数(成员全部初始化,无参数,函数体为空);同理,只要没有用户自定义析构函数,编译器也会自动提供一个默认析构函数(无参数,函数体为空)。这两者都是‘隐式声明’的,代码里不写它们,对象照样能正常创建和销毁。
命题人挖坑的点在于‘都不是必须手动定义’这句话的绝对化表述。初学者常把‘构造函数不能是虚函数’这条知识点套用到本题,误以为构造函数必须显式写,从而选错。其实本题不涉及虚函数,只考察默认生成机制:因为默认构造函数和默认析构函数在特定条件下(无用户定义)是自动存在的,所以用户确实不必手动定义它们。只要题目没加‘类中有自定义构造函数’等限制条件,原话描述就是事实。
思考过程:看到题干,先判断类是否有任何用户自定义构造函数或析构函数。若无,则编译器已提供默认版本,命题成立;若有,则默认版本被覆盖,命题不成立。本题属于前者,因此选 A。
易错点:把‘构造函数不能是虚函数’与‘构造函数必须显式定义’混为一谈。记住:构造函数确实不能是虚函数(虚表在构造函数完成后才建立),但这与本题无关。本题只问‘是否必须手动定义’,默认生成的存在就足以让命题成立。若题目加‘有自定义构造函数’条件,答案才会变,这是同一考点的变体陷阱。
考频趋势:在 GESP 六级历年真题中,此类概念题出现频率较高,2023 年 287 题、2024 年 413 题、2025 年 401 题均涉及基础语法与面向对象概念,说明命题人偏爱用简短语句考察学生对默认机制的理解。
预测:未来六级仍可能以‘默认构造函数/析构函数何时被覆盖’为切入点,但会更多结合‘有自定义成员’或‘有自定义构造函数’的条件来制造变体,而非单纯考默认存在。暂无足够依据预测具体题型变化,建议重点掌握默认生成规则及其被覆盖的边界条件。