GESP 六级 · GESP 202503 C++ 六级 第 15 题

选择题 · 答案 A · 考点:函数

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

题目

关于下面代码,说法错误的是( )。

class Shape {
protected:
    string name;

public:
    Shape(const string& n) : name(n) {}

    virtual double area() const {
        return 0.0;
    }
};

class Circle : public Shape {
private:
    double radius;

public:
    Circle(const string& n, double r) : Shape(n), radius(r) {}

    double area() const override {
        return 3.14159 * radius * radius;
    }
};

class Rectangle : public Shape {
private:
    double width;   // 宽度
    double height;  // 高度

public:
    Rectangle(const string& n, double w, double h) : Shape(n), width(w), height(h) {}

    double area() const override {
        return width * height;
    }
};

int main() {
    Circle circle("MyCircle", 5.0);
    Rectangle rectangle("MyRectangle", 4.0, 6.0);

    Shape* shapePtr = &circle;
    cout << "Area: " << shapePtr->area() << endl;

    shapePtr = &rectangle;
    cout << "Area: " << shapePtr->area() << endl;

    return 0;
}
答案:A

考点

函数

解题思维

逐项分析每个选项,利用C++语法规则和算法知识判断正误。注意隐含条件(如整型溢出、栈溢出)。

常见错误

注意题目问的是"错误的是"还是"正确的是",避免看反。选项中若有绝对化表述通常错误。

详细解析(节选)

【考点】C++继承体系|虚函数重写|多态指针

🎯 考纲定位:C++ 面向对象的继承与多态(六级)核心考点。命题人精准卡住“基类指针可指向任意派生类对象”这一关键概念,多数考生误以为指针类型必须完全一致,却忘了继承体系下类型兼容的本质,此题专挖多态实现层面的理解盲区。

🧠 解题思维:识别基类指针指向派生类对象是合法操作,核心在于基类指针类型与派生类对象类型兼容。通法:遇到指针赋值题,先看基类指针定义,再看派生类对象定义,若派生类继承自基类则赋值合法,无需强转。

🪤 陷阱拆解:A选项是典型“指针类型陷阱”,命题人利用“基类指针只能指向基类对象”的误解,实则基类指针可指向任意派生类。B、C、D均为正确陈述,A是唯一错误项。若只背“指针类型必须一致”,就会误判A正确,此题专挖“多态指针”概念盲区。此外D选项提到"override"关键字,若缺失则不会报错但失去编译期检查,命题人用此细节区分真正理解多态与仅会调用。

🔄 反命题思维:若将指针改为Circle*或Rectangle*,赋值会报错;若去掉基类virtual,多态失效。遇到此类题先自问“改指针类型会怎样?”“去掉virtual会怎样?”,方能避开命题人预设的陷阱。

同考点真题

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