首页 新闻 会员 周边

C++ 类、继承、虚函数、子类

0
悬赏园豆:10 [已解决问题] 解决于 2021-11-30 08:29

基类

class CameraOpt{
public:
    QLabel label;
    int type;//1 DH;2、HIK;3、OpenCV初始化时根据这个字段来区分这个类是那个子类的
    Param param;

public:
    bool virtual openVideo();

    bool virtual closeVideo();

    bool virtual getVideoStatus();
protect:
    bool virtual initParam();
}

子类CameraOptOpenCV

class CameraOptOpenCV : public CameraOpt{
    public:
        VideoCapture cap;
        Mat mat;

    public:
        bool openVideo() override;

        bool closeVideo() override;

        bool getVideoStatus() override;

    protected:
        bool initParam() override;
}

子类 CameraOptSDK

class CameraOptSDK : public CameraOpt{
    public:
        bool virtual ratate();//旋转
        bool virtual ptz();
        bool virtual wiper();//雨刷

    private:
        bool virtual login();
        bool virtual logout();
}

子类 CameraOptDH

class CameraOptDH : public CameraOptSDK{
    public:
        bool openVideo() override;

        bool closeVideo() override;

        bool getVideoStatus() override;

        bool ratate() override;

        bool ptz() override;

        bool wiper() override;

    protected:
        bool initParam() override;

    private:
        bool login() override;
        bool logout() override;
        LONG port = -1;
}

子类 CameraOptHIK

class CameraOptHIK : public CameraOptSDK{
    public:
        bool openVideo() override;

        bool closeVideo() override;

        bool getVideoStatus() override;

        bool ratate() override;

        bool ptz() override;

        bool wiper() override;

    protected:
        bool initParam() override;

    private:
        bool login() override;
        bool logout() override;

        friend void CALLBACK realDataCallback(LLONG lRealHandle);
}

结构基本上如图

问题

我想通过 CameraOpt的属性 flag ,将其动态类型转换为各个子类,完成对子类方法的调用。
即在项目中有多个CameraOpt指针,当需要使用时,对其flag对象赋值,然后动态类型转换为对应的子类,完成那么多方法操作……

怎么便捷地把CameraOpt转换为各子类?

echo_lovely的主页 echo_lovely | 小虾三级 | 园豆:1437
提问于:2021-11-26 10:05
< >
分享
最佳答案
0

设计模式 之 策略模式、状态模式

收获园豆:10
快乐的凡人721 | 老鸟四级 |园豆:3918 | 2021-11-26 19:51

大致看了,策略模式,他们需要继承同一个接口,但是这里面接最下面的三个类里面OpenCV和其他的比较,方法数量少

echo_lovely | 园豆:1437 (小虾三级) | 2021-11-29 09:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册