Inheritance 用RAII和继承实现构造函数
我正在为我们公司的设备开发一个硬件库,其中包括需要访问摄像头和各种照明的设备。基本硬件接口的设计如下Inheritance 用RAII和继承实现构造函数,inheritance,constructor,c++-cli,raii,Inheritance,Constructor,C++ Cli,Raii,我正在为我们公司的设备开发一个硬件库,其中包括需要访问摄像头和各种照明的设备。基本硬件接口的设计如下 public ref class IHardware abstract { protected: ICamera* camera; ILight^ light; ... public: IHarware(); ... virtual bool acquireImage() abstract; ... }; 这里,ICamera和ILi
public ref class IHardware abstract {
protected:
ICamera* camera;
ILight^ light;
...
public:
IHarware();
...
virtual bool acquireImage() abstract;
...
};
这里,ICamera
和ILight
是相应硬件部件的接口。
我需要开发的DLL包含上述接口以及我们标准设备的专用IHardware
,我们称之为SHardware
。对于ICamera
和ILight
也存在该设备的特殊化,即SCamera
和SLight
。
因为我想使用RAII,所以SHardware
的构造函数如下
SHardware::SHardware : IHardware() {
...
camera = new SCamera();
camera->Init();
light = gcnew SLight();
light->Init();
...
}
现在,假设我想使用SHardware类进行进一步的特殊化,例如,对于一个名为NHardware
的类。我有NCamera
从SCamera
写入的类和NLight
从SLight
写入的类。我的问题是如何实现NHardware
的构造函数;如果是
NHardware::NHardware() : SHardware() {...}
camera
和light
已经在shardaware()
中初始化,因此在创建NCamera
和NLight
对象之前,我必须删除它们,这对我来说似乎不正确。当然,我可以在一个单独的虚拟函数中以某种方式提取相机和照明初始化,并在NHardware
类中重写它,但是当调用SHardware
构造函数时,不是也首先使用SHardware
初始化函数吗?
我相信这是一个非常常见的问题,解决方法非常简单,但现在我不明白,所以非常感谢您的帮助!谢谢
Matz为什么不使用受保护的
构造函数和允许禁用子对象实例化的参数?(或直接将新的子对象传递给它)谢谢。有时候,我只是没有想到简单的解决办法。