下列代码可以正常编译,因为编译器会自动为 Student 类生成一个无参数构造函数。
class Student {
public:
Student(int x) {
age = x;
}
private:
int age;
};
int main() {
Student s;
}看到类定义里有自定义构造函数,立刻想到编译器不会再生成默认构造函数。再看 Student s; 无参调用,必然编译失败。
选项 A 的陷阱在于"默认构造函数"一词的绝对化表述。命题人利用考生对"默认构造函数"概念的模糊记忆,故意省略"无自定义构造函数"这一前提条件。
本题考查 GESP 六级 C++ 大纲中"类与对象"模块的构造函数规则。命题人专门设计这道题,就是要卡住那些只背"类有默认构造函数"口诀、却忽略"有自定义构造函数则不生成默认构造函数"这一关键条件的考生。
看到 Student(int x) 立刻想到:类中已定义构造函数,编译器就不会再生成默认构造函数。再看 Student s; 无参调用,必然编译失败。