← IC验证面试常问题88道

推荐答案 测试一下

编写相应的类对基类进行覆盖。

编程题 中等 笔试真题

参考答案

该题考察面向对象编程中的覆盖(override)机制,即派生类重新定义基类的虚函数。覆盖要求函数签名(名称、参数类型、个数、const/volatile限定)必须完全一致,并且基类函数必须声明为virtual。若签名不一致则成为隐藏(hide)而非覆盖。在C++中,推荐使用override关键字显式标记,以便编译器检查。示例: // 基类 class Shape { public: virtual double area() const { return 0; } virtual ~Shape() = default; }; // 派生类覆盖 class Circle : public Shape { private: double r; public: Circle(double radius) : r(radius) {} double area() const override { return 3.14 * r * r; } }; 易错点:1) 忘记在基类加virtual,导致静态绑定而非动态绑定;2) 参数或const不一致,造成隐藏;3) 析构函数未声明virtual导致派生类对象析构不完整。在SystemVerilog中语法类似:基类函数用virtual,派生类用virtual function ... override;。若基类函数是纯虚(pure virtual),则派生类必须覆盖,否则派生类也成为抽象类。覆盖是实现多态的基础,通过基类指针或引用调用同名函数时可以执行派生类版本。

涉及知识点

  • 覆盖(override)的定义与条件
  • virtual关键字的作用
  • override关键字与编译器检查
  • 隐藏(hide)与覆盖的区别
  • 多态的实现(动态绑定)
  • 虚析构函数的重要性
登录后反馈错题
下一题 →