最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

? 一、抽象基類 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;
    }
};

? 功能:

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

?? 特點說明:

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

? 二、具體子類 Device_Info 實現(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;                        // 設備文件描述符
    std::atomic<bool> capture;         // 控制采集線程狀態(tài)
    streamCb callback;                 // 數(shù)據(jù)回調(diào)函數(shù)
    std::thread thread;                // 采集線程
    std::mutex syncMutex;              // 用于線程同步
    std::condition_variable syncCond;  // 用于線程同步
};

? 作用:

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

你可以這樣理解:

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

? 三、你這個類的用途總結

這個類典型用法如下圖:

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

也可以在設備框架中注冊:

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

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

? 四、線程相關部分說明

類中有如下成員:

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

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

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

? 五、你應該怎么使用它?

例如你可以這么寫:

Device_Info device;
device.open(my_stream_callback);  // 注冊回調(diào)
device.start();                   // 啟動采集線程
// … 等待采集 …
device.stop();                    // 停止采集
device.close();                   // 關閉設備

? 六、補充建議

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

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

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

非常好!作為 C++ 初學者,你現(xiàn)在接觸的是 C++ 面向對象編程的核心概念之一:抽象類 和 虛函數(shù)機制。你這段代碼非常典型,下面我會用通俗易懂的方式來講清楚你看到的每一部分,幫助你徹底理解這個“接口類”的作用。

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

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;
    }
};

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

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

它的設計目標就是:“統(tǒng)一接口,便于擴展”,常用于大型項目的架構設計中。

? 二、逐句解釋代碼

class cap_ops { ... };

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

virtual ~cap_ops() {};

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

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

面試???!

virtual int init() { return 0; }

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

virtual int open(streamCb callback) = 0;

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

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

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

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

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

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

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

? 三、為啥要這樣設計?(舉個栗子??)

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

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

它們的功能不同,但“打開/啟動/停止/關閉”的操作流程很相似。

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

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

然后你就可以統(tǒng)一管理這些設備了,比如用一個數(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ī)范!

這就是面向對象中最強大的思想之一:多態(tài)(Polymorphism)。

? 四、總結:這段代碼學到了什么?

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

? 如果你想更深入了解

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

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

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

你已經(jīng)邁出了 C++ 面向對象的關鍵一步,很棒了!繼續(xù)保持!??

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

相關文章

  • 基于MATLAB神經(jīng)網(wǎng)絡圖像識別的高識別率代碼

    基于MATLAB神經(jīng)網(wǎng)絡圖像識別的高識別率代碼

    今天小編就為大家分享一篇關于基于MATLAB神經(jīng)網(wǎng)絡圖像識別的高識別率代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • C語言圖書管理系統(tǒng)簡潔版

    C語言圖書管理系統(tǒng)簡潔版

    這篇文章主要為大家詳細介紹了C語言圖書管理系統(tǒng)簡潔版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++實現(xiàn)PatchMatch圖像修復算法

    C++實現(xiàn)PatchMatch圖像修復算法

    這篇文章主要介紹了C++實現(xiàn)PatchMatch圖像修復算法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • C語言數(shù)據(jù)的存儲超詳細講解下篇浮點型在內(nèi)存中的存取

    C語言數(shù)據(jù)的存儲超詳細講解下篇浮點型在內(nèi)存中的存取

    使用編程語言進行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么
    2022-04-04
  • C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)詳解

    C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)詳解

    這篇文章主要為大家介紹了C++的靜態(tài)成員變量和靜態(tài)成員函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C語言數(shù)據(jù)的存儲超詳細講解中篇練習

    C語言數(shù)據(jù)的存儲超詳細講解中篇練習

    使用編程語言進行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么
    2022-04-04
  • C++判斷一個點是否在圓內(nèi)的方法

    C++判斷一個點是否在圓內(nèi)的方法

    這篇文章主要為大家詳細介紹了C++判斷一個點是否在圓內(nèi)的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C++11新特性之lambda、包裝器詳解

    C++11新特性之lambda、包裝器詳解

    lambda表達式是一種匿名函數(shù)對象,可以定義在函數(shù)內(nèi)部,用于定義輕量級的局部小函數(shù),本文給大家介紹C++11新特性之lambda、包裝器的相關知識,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • C語言中回調(diào)函數(shù)的含義與使用場景詳解(2)

    C語言中回調(diào)函數(shù)的含義與使用場景詳解(2)

    這篇文章主要為大家詳細介紹了C語言中回調(diào)函數(shù)的含義與使用場景,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言求質(zhì)數(shù)的幾種簡單易懂方式

    C語言求質(zhì)數(shù)的幾種簡單易懂方式

    這篇文章主要介紹了C語言求質(zhì)數(shù)的幾種簡單易懂方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論

浦城县| 乌拉特后旗| 鄂伦春自治旗| 广丰县| 吴旗县| 锦州市| 郑州市| 丰镇市| 肇州县| 宁国市| 汝南县| 唐河县| 平舆县| 永新县| 台南县| 南皮县| 措美县| 大荔县| 孟津县| 和顺县| 剑河县| 望江县| 宣威市| 沈阳市| 石阡县| 都匀市| 交城县| 镇康县| 木兰县| 徐闻县| 安多县| 株洲市| 墨脱县| 兴隆县| 青田县| 象州县| 农安县| 句容市| 淮阳县| 马尔康县| 军事|