下面定义了一个表示二维坐标点的类 Point ,并提供了一个带参数的构造函数,但第 $2$ 行 Point b; 会调用编译器自动生成的默认构造函数,将 b.x 和 b.y 被初始化为 0.0,程序可以正常编译运行。
class Point {
public:
double x, y;
Point(double px, double py) : x(px), y(py) {}
void print() {
cout << "(" << x << ", " << y << ")";
}
};
int main() {
Point a(3.0, 4.0); // ①
Point b; // ②
a.print();
}仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。
模拟执行时注意:① 循环变量的起始和终止值;② 递归的边界条件;③ 数据类型转换和精度问题。
【考点】C++ 类定义|iostream 头文件|默认构造函数
GESP 六级 C++ 模块重点考察类与对象、构造函数、以及标准库的规范使用。命题人卡住的是考生对头文件依赖的忽视,以为 cout 随编译器自带,这是六级阶段常见盲区。但六级要求考生具备严谨的编程习惯,任何标准库函数都必须显式引入对应头文件。
看代码发现 print() 用了 cout,但全文件无任何 #include,编译器找不到 cout 定义。默认构造函数虽能生成,但缺少头文件导致编译失败,这是 C++ 编译器的硬性规则。即便没有 b 的初始化,a.print() 是第一个执行点,但 cout 未定义,编译即停。
错误选项 B 的设计利用了“默认构造函数自动存在”的惯性思维,让考生误以为程序能跑。最阴险的是 cout 的隐式依赖——不显式引入 <iostream>,任何涉及输出的代码都会编译报错,这是六级考察的严谨性。考生容易忽略这个细节,认为只要类定义正确就能编译。
若加上 #include <iostream> 则能编译,但原题未给。刷到类似题先问“标准库是否已引入”,别被“有构造函数”带偏节奏,这是六级命题人的典型套路。记住,C++ 不是 Python,没有隐式导入。