3.构造函数能否声明为虚函数或者纯虚函数,析构函数呢?

3.构造函数能否声明为虚函数或者纯虚函数,析构函数呢?

构造函数

不能声明为虚函数,也不能是纯虚函数。

原因:

  1. 虚函数依赖虚表指针(vfptr)
  2. 虚表指针是在构造函数执行期间才初始化的
  3. 构造函数本身还没执行时,对象还不存在,没有虚表
  4. 语法上直接不允许

结论:

构造函数不能是 virtual /pure virtual。

析构函数

可以是虚函数,也可以是纯虚函数

  • 析构函数可以是虚函数(非常常用)
  • 析构函数也可以是纯虚函数,但必须提供实现体
class Base {
public:
    virtual ~Base() = 0;
};

// 纯虚析构必须实现
Base::~Base() {}

原因:

  • 子类析构后会自动调用基类析构
  • 如果基类纯虚析构没有实现,链接会报错

一句话背诵(面试满分)

构造函数不能是虚函数或纯虚函数,因为对象未构造完成,没有虚表;

析构函数可以是虚函数,也可以是纯虚函数,但纯虚析构必须提供实现。

posted @ 2026-04-28 14:43  CodeMagicianT  阅读(5)  评论(0)    收藏  举报