默认实现,子类(如 CRenderDevice_Renderware)

这是基类的默认实现,子类(如 CRenderDevice_Renderware)会在它的 OnCreate 中 先调用基类的 OnCreate,再做自己的渲染 API 初始化。 调用子类的OnCreate 一定会调用父类的OnCreate 吗?

不会 自动 调用。

在 C++ 里,虚函数的覆盖不会自动把父类的实现也调用一遍
也就是说,当你在子类里写:

 
BOOL CRenderDevice_Renderware::OnCreate(stRenderDeivceSettings* pDeviceSettings) { // 这里不会自动调用 CRenderDevice::OnCreate ... }

父类 CRenderDevice::OnCreate 并不会被执行。
如果子类希望复用父类的逻辑,就必须 显式调用基类的版本

 
BOOL CRenderDevice_Renderware::OnCreate(stRenderDeivceSettings* pDeviceSettings) { // 调用父类版本,处理通用逻辑 if (!CRenderDevice::OnCreate(pDeviceSettings)) return FALSE; // 然后执行子类自己特定的初始化逻辑 if (!_SelectVideoDevice()) return FALSE; RwD3D9EngineSetMultiThreadSafe(TRUE); ... return TRUE; }

这种模式的好处就是:

  • 基类封装了“所有渲染设备都需要的通用设置”。

  • 子类只管做自己专属的初始化逻辑。

  • 子类可选择是否调用父类版本(大多数情况下需要调用)。


所以回答你的问题:
👉 调用子类的 OnCreate 不会自动调用父类的 OnCreate,必须在子类实现里手动写 CRenderDevice::OnCreate(...) 才会调用到。

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

导航