GESP 六级 · GESP 202312 C++ 六级 第 3 题

选择题 · 答案 C

← 整套速查表 GESP 六级 全部真题

题目

有关下面 C++ 代码的说法,正确的是( )。

using namespace std;
class newClass
{
public:
    static int objCounter;
};
int newClass::objCounter = 2;
int main()
{
    newClass classA;
    newClass classB;
    cout << newClass::objCounter << endl; // 第 14 行
    cout << classB.objCounter << endl; // 第 15 行
}
答案:C

解题思维

静态成员变量属于类,不属于对象,所有对象共享同一份数据。所以既可以通过类名访问,也可以通过任意对象访问,两行代码都合法。

常见错误

很多考生看到第14行用类名访问会犹豫,以为静态成员必须通过对象访问;或者看到第15行用对象访问,又觉得静态成员不该通过对象访问。其实静态成员访问方式很灵活,只要语法合法就行。另外,第6行是初始化语句,不是赋值语句,不能改成+=1,因为+=需要左右两边都有值,而第6行刚定义,没有值可加。

详细解析(节选)

考点与概念

这道题考的是C++静态成员变量的访问规则。静态成员变量(static成员)在类中声明,但在类外初始化,它属于类本身,而不是属于某个具体的对象。这意味着:

命题视角

命题人故意把静态成员变量放在类里,然后让考生判断两行输出语句是否正确。很多初学者会混淆“静态成员”和“普通成员”的访问方式:

这道题就是利用这个知识点,看考生是否真正理解静态成员的本质。同时,命题人还埋了一个陷阱:第6行是初始化语句,不是赋值语句,考生容易误以为可以改成 objCounter += 1,但实际上 += 需要左右两边都有值,而第6行刚定义,没有值可加,所以语法错误。

思考过程

拿到代码后,先看第14行:cout << newClass::objCounter << endl;

再看第15行:cout << classB.objCounter << endl;

所以两行代码都正确,答案选C。

避坑提醒

考频与趋势

从题库数据看,静态成员变量属于GESP六级C++模块「面向对象」考点,历年考频如下:

预测

基于历年考频数据,静态成员变量在GESP六级中的考频较高,且近年来题目数量呈上升趋势,预计未来几年该考点仍会保持较高频率。命题人可能会继续通过访问方式、初始化语句、静态成员与对象成员的区别等角度出题,考生需重点掌握静态成员的本质和访问规则。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断