亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++ 虛函數(shù)實(shí)戰(zhàn)示例詳解

 更新時(shí)間:2025年07月16日 10:24:45   作者:W1E  
C++抽象基類cap_ops定義設(shè)備操作接口,支持多態(tài),統(tǒng)一管理攝像頭、傳感器等設(shè)備,包含線程控制與資源管理方法,建議使用智能指針和日志,便于擴(kuò)展和維護(hù),本文給大家介紹C++ 虛函數(shù)實(shí)戰(zhàn),感興趣的朋友一起看看吧

你這段代碼展示了一個(gè)典型的 C++ 面向?qū)ο笤O(shè)計(jì)框架,特別適合用于設(shè)備驅(qū)動(dòng)接口、攝像頭/傳感器采集接口、或嵌入式系統(tǒng)中的數(shù)據(jù)流采集模塊。

下面我們來逐層講解你這個(gè)代碼在干什么

? 一、抽象基類 cap_ops

class cap_ops {
public:
    virtual ~cap_ops() {};
    virtual int init() { return 0; }
    virtual int open(streamCb callback) = 0;
    virtual int start() = 0;
    virtual int stop() = 0;
    virtual int close() = 0;
    virtual int custom_ioctl(int type, void *input, void *output) {
        return 0;
    }
};

? 功能:

這是一個(gè)純虛基類(抽象接口),表示“某種可采集的設(shè)備操作集合(capture operations)”。

?? 特點(diǎn)說明:

成員含義
virtual ~cap_ops()虛析構(gòu)函數(shù),保證子類析構(gòu)時(shí)資源能正確釋放
init()可選初始化操作,提供默認(rèn)實(shí)現(xiàn)
open()、start()、stop()close()純虛函數(shù)(= 0),必須由子類實(shí)現(xiàn)
custom_ioctl()自定義控制命令(提供默認(rèn)空實(shí)現(xiàn))

? 二、具體子類 Device_Info 實(shí)現(xiàn)接口

class Device_Info : public cap_ops {
public:
    Device_Info();
    ~Device_Info();
    int open(streamCb callback);
    int start();
    int stop();
    int close();
    // 拓展的功能函數(shù)
    int get_soc_temp(void);
    int get_mcu_temp(void);
    int get_cpu_use_rate(void);
    int get_ram_use_rate(void);
    int get_rgb_frame_rate(void);
    int get_dtof_frame_rate(void);
    int get_point_cloud_rate(void);
    Version_ID_t get_soc_app_version(void);
    Version_ID_t get_soc_kernel_version(void);
    Version_ID_t get_mcu_version(void);
    Version_ID_t get_soc_Daemon_proc_version(void);
    Version_ID_t get_soc_slam_alo_version(void);
    int get_sensor_dtof_temp(void);
private:
    void device_info_capture(void *arg);
    int fd = -1;                        // 設(shè)備文件描述符
    std::atomic<bool> capture;         // 控制采集線程狀態(tài)
    streamCb callback;                 // 數(shù)據(jù)回調(diào)函數(shù)
    std::thread thread;                // 采集線程
    std::mutex syncMutex;              // 用于線程同步
    std::condition_variable syncCond;  // 用于線程同步
};

? 作用:

這個(gè)類是對(duì) cap_ops具體實(shí)現(xiàn),是一個(gè)實(shí)際的“設(shè)備信息采集類”。

你可以這樣理解:

cap_ops 是“接口”,Device_Info 是“具體設(shè)備的實(shí)現(xiàn)”。

? 三、你這個(gè)類的用途總結(jié)

這個(gè)類典型用法如下圖:

cap_ops* dev = new Device_Info();
dev->open(my_callback);
dev->start();
// 后續(xù)處理……

也可以在設(shè)備框架中注冊(cè):

std::vector<cap_ops*> device_list;
device_list.push_back(new Device_Info());

這樣你可以實(shí)現(xiàn)多種設(shè)備的統(tǒng)一抽象管理,比如不同攝像頭、IMU、溫度傳感器、RGBD 模塊等都繼承 cap_ops。

? 四、線程相關(guān)部分說明

類中有如下成員:

std::thread thread;
std::mutex syncMutex;
std::condition_variable syncCond;
std::atomic<bool> capture;

這些是典型的 采集線程控制器,說明這個(gè)類很可能:

  • start() 中創(chuàng)建一個(gè)采集線程
  • 在線程中讀取設(shè)備數(shù)據(jù)(比如通過 I²C、USB、文件系統(tǒng)等)
  • 然后通過 callback 反饋數(shù)據(jù)出去
  • stop() 中停止線程
  • close() 中釋放資源

? 五、你應(yīng)該怎么使用它?

例如你可以這么寫:

Device_Info device;
device.open(my_stream_callback);  // 注冊(cè)回調(diào)
device.start();                   // 啟動(dòng)采集線程
// … 等待采集 …
device.stop();                    // 停止采集
device.close();                   // 關(guān)閉設(shè)備

? 六、補(bǔ)充建議

如果你是這個(gè)代碼的維護(hù)者/開發(fā)者,可以考慮做以下改進(jìn):

  • 使用 std::unique_ptr<cap_ops> 管理資源,避免泄漏;
  • open() 函數(shù)建議加參數(shù)檢查(回調(diào)不能是空);
  • 加入日志宏,便于跟蹤設(shè)備采集狀態(tài);
  • 若涉及多個(gè)設(shè)備,可做一個(gè) Device_Manager 統(tǒng)一管理不同 cap_ops 子類。

如果你想調(diào)試這個(gè)類的線程問題、數(shù)據(jù)采集流程、或某個(gè) get_cpu_use_rate() 等函數(shù)實(shí)現(xiàn),我也可以進(jìn)一步幫你分析。歡迎貼上代碼繼續(xù)交流。

非常好!作為 C++ 初學(xué)者,你現(xiàn)在接觸的是 C++ 面向?qū)ο缶幊痰暮诵母拍钪唬撼橄箢?和 虛函數(shù)機(jī)制。你這段代碼非常典型,下面我會(huì)用通俗易懂的方式來講清楚你看到的每一部分,幫助你徹底理解這個(gè)“接口類”的作用。

? 一、這段代碼是干什么的?

class cap_ops {
public:
    virtual ~cap_ops() {};
    virtual int init() { return 0; }
    virtual int open(streamCb callback) = 0;
    virtual int start() = 0;
    virtual int stop() = 0;
    virtual int close() = 0;
    virtual int custom_ioctl(int type, void *input, void *output) {
        return 0;
    }
};

這是一個(gè) 抽象接口類(英文通常叫 interface base class),意思是:

定義了一組功能接口(函數(shù)名和參數(shù)),但不關(guān)心具體怎么實(shí)現(xiàn)。由“子類”去繼承并實(shí)現(xiàn)這些功能。

它的設(shè)計(jì)目標(biāo)就是:“統(tǒng)一接口,便于擴(kuò)展”,常用于大型項(xiàng)目的架構(gòu)設(shè)計(jì)中。

? 二、逐句解釋代碼

class cap_ops { ... };

定義了一個(gè)類,名字叫 cap_ops,可以理解為:“捕獲操作(Capture Operations)”。

virtual ~cap_ops() {};

這是一個(gè) 虛析構(gòu)函數(shù),目的是為了讓你在通過基類指針釋放子類對(duì)象時(shí),能正確析構(gòu)子類資源。

cap_ops* p = new Device_Info();  // 派生類對(duì)象
delete p;  // ? 若析構(gòu)函數(shù)是虛函數(shù),才能正確釋放子類資源

面試???!

virtual int init() { return 0; }

  • 這是一個(gè)虛函數(shù),有默認(rèn)實(shí)現(xiàn),子類可以選擇重寫(override)。
  • 比如有些設(shè)備需要初始化,有些不需要,這里提供默認(rèn)實(shí)現(xiàn) return 0(代表成功)。

virtual int open(streamCb callback) = 0;

這個(gè) = 0 表示這是一個(gè)純虛函數(shù),意思是:

這個(gè)函數(shù)必須由子類實(shí)現(xiàn),否則這個(gè)類不能被實(shí)例化。

這種函數(shù)通常用來定義“接口”,而不提供實(shí)現(xiàn)。例如打開設(shè)備、設(shè)置回調(diào)等。

virtual int start() = 0;stop()、close()

也是純虛函數(shù),表示所有繼承 cap_ops 的子類都必須實(shí)現(xiàn)這幾個(gè)函數(shù),否則編譯不過。

virtual int custom_ioctl(...) { return 0; }

這是一個(gè)帶有默認(rèn)實(shí)現(xiàn)的虛函數(shù),代表設(shè)備的“自定義命令接口”(很像 Linux 驅(qū)動(dòng)中的 ioctl),
子類可以選擇重寫它,也可以使用默認(rèn)實(shí)現(xiàn)。

? 三、為啥要這樣設(shè)計(jì)?(舉個(gè)栗子??)

假設(shè)你現(xiàn)在要支持三種設(shè)備:

  • 攝像頭(Camera)
  • 麥克風(fēng)(Microphone)
  • 溫度傳感器(TempSensor)

它們的功能不同,但“打開/啟動(dòng)/停止/關(guān)閉”的操作流程很相似。

你可以統(tǒng)一寫一個(gè)接口類 cap_ops,然后不同設(shè)備繼承它:

class Camera : public cap_ops {
    int open(streamCb cb) override { ... }
    int start() override { ... }
    int stop() override { ... }
    int close() override { ... }
};
class Microphone : public cap_ops {
    // 實(shí)現(xiàn)類似函數(shù)
};

然后你就可以統(tǒng)一管理這些設(shè)備了,比如用一個(gè)數(shù)組:

std::vector<cap_ops*> devices;
devices.push_back(new Camera());
devices.push_back(new Microphone());
for (auto dev : devices) {
    dev->open(my_cb);
    dev->start();
}

你無需關(guān)心它到底是哪個(gè)設(shè)備,反正都符合接口規(guī)范!

這就是面向?qū)ο笾凶顝?qiáng)大的思想之一:多態(tài)(Polymorphism)。

? 四、總結(jié):這段代碼學(xué)到了什么?

概念解釋
virtual表示虛函數(shù),可以被子類重寫
= 0表示純虛函數(shù),子類必須實(shí)現(xiàn)(抽象接口)
抽象類有至少一個(gè)純虛函數(shù)的類,不能直接實(shí)例化
多態(tài)父類指針調(diào)用子類實(shí)現(xiàn)的函數(shù)(通過 virtual 實(shí)現(xiàn))
接口設(shè)計(jì)抽象類定義規(guī)范,子類實(shí)現(xiàn)具體功能
虛析構(gòu)函數(shù)用父類指針刪除子類對(duì)象時(shí),必須加 virtual 保證資源釋放完整

? 如果你想更深入了解

我可以為你寫一個(gè)完整的例子,展示這個(gè)接口類和子類如何協(xié)作工作,包括:

  • 如何 new 一個(gè)子類對(duì)象;
  • 如何通過 cap_ops* 來調(diào)用接口;
  • 如何啟動(dòng)采集線程、回調(diào)函數(shù)等;

只需要說一聲“寫個(gè)完整 demo 給我”,我馬上就給你寫 ????。

你已經(jīng)邁出了 C++ 面向?qū)ο蟮年P(guān)鍵一步,很棒了!繼續(xù)保持!??

到此這篇關(guān)于C++ 虛函數(shù)實(shí)戰(zhàn)介紹的文章就介紹到這了,更多相關(guān)C++ 虛函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MFC中exe圖標(biāo)修改的方法

    MFC中exe圖標(biāo)修改的方法

    修改窗口標(biāo)題圖標(biāo)可通過導(dǎo)入圖標(biāo),然后在CMainFrame.:OnCreate函數(shù)中加載圖標(biāo)即可, 代碼如下:
    2013-04-04
  • C語言實(shí)現(xiàn)求解素?cái)?shù)的N種方法總結(jié)

    C語言實(shí)現(xiàn)求解素?cái)?shù)的N種方法總結(jié)

    哈嘍各位友友們,今天又學(xué)到了很多有趣的知識(shí),現(xiàn)在迫不及待的想和大家分享一下!本文將手把手帶領(lǐng)大家探討利用試除法、篩選法求解素?cái)?shù)的n層境界!都是精華內(nèi)容,可不要錯(cuò)過喲
    2023-01-01
  • VC雙畫布消除屏幕閃爍實(shí)例詳解

    VC雙畫布消除屏幕閃爍實(shí)例詳解

    這篇文章主要介紹了VC雙畫布消除屏幕閃爍實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 深入探究C++編程中的資源泄漏問題以及排查方法

    深入探究C++編程中的資源泄漏問題以及排查方法

    在C++程序開發(fā)維護(hù)過程中,時(shí)常會(huì)遇到資源泄漏問題,比如GDI對(duì)象泄漏、進(jìn)程線程句柄泄漏以及內(nèi)存泄漏問題,今天我們就來深入探討一下這幾類資源泄漏以及排查這些泄露的辦法,需要的朋友可以參考下
    2023-10-10
  • C++虛函數(shù)和多態(tài)超詳細(xì)分析

    C++虛函數(shù)和多態(tài)超詳細(xì)分析

    這篇文章主要介紹了C++多態(tài)的特性派生與虛函數(shù)與模板,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • C++ OpenCV實(shí)現(xiàn)灰度圖蒙版GrayMask的示例代碼

    C++ OpenCV實(shí)現(xiàn)灰度圖蒙版GrayMask的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C++和OpenCV實(shí)現(xiàn)灰度圖蒙版GrayMask,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定參考價(jià)值,需要的可以參考一下
    2022-05-05
  • 用c++實(shí)現(xiàn)x的y次冪的代碼

    用c++實(shí)現(xiàn)x的y次冪的代碼

    以下實(shí)例是對(duì)使用c++實(shí)現(xiàn)x的y次冪的解決方法進(jìn)行了介紹。需要的朋友參考下
    2013-05-05
  • QT5編譯使用QFtp的方法步驟

    QT5編譯使用QFtp的方法步驟

    這篇文章主要介紹了QT5編譯使用QFtp的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • QT實(shí)現(xiàn)簡單計(jì)算器功能

    QT實(shí)現(xiàn)簡單計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)簡單計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • C++string中的insert()插入函數(shù)詳解

    C++string中的insert()插入函數(shù)詳解

    這篇文章主要介紹了C++string中的insert()插入函數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論