构造函数跟析构函数默认自动调用其他的必须显示调用是吗

1. 构造函数 / 析构函数

这两个是 自动调用基类的

  • 构造函数:当你创建子类对象时,会先自动调用基类构造函数,再调用子类构造函数。

    • 如果你不写,默认会调用基类的 无参构造函数

    • 如果基类没有无参构造函数,你必须在子类构造函数初始化列表里显式调用:

       
      class Base { public: Base(int x) { ... } }; class Derived : public Base { public: Derived() : Base(10) { ... } // 必须显式调用 };
  • 析构函数:当子类对象销毁时,先调用子类析构函数,再自动调用基类析构函数,这也是保证释放顺序正确的机制。

所以构造/析构 不需要你手动写 Base::~Base(),编译器会自动插入调用。


2. 普通成员函数(包括虚函数)

这里不会自动调用基类实现,子类覆盖后就“替换”掉了父类版本。
要想复用父类逻辑,必须手动写:

 
BOOL Derived::OnCreate(...) { if (!Base::OnCreate(...)) return FALSE; // 手动调用 // 子类扩展逻辑 return TRUE; }

✅ 总结:

  • 构造函数 / 析构函数:自动调用基类的(但构造时如果父类没有默认构造函数,就必须手动指定)。

  • 普通函数(包括虚函数):不会自动调用基类,想用必须显式调用。

posted on 2025-10-07 23:48  lydstory  阅读(11)  评论(0)    收藏  举报

导航