溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++中怎么實(shí)現(xiàn)一個(gè)接口

發(fā)布時(shí)間:2021-08-06 15:50:39 來源:億速云 閱讀:253 作者:Leah 欄目:編程語言

C++中怎么實(shí)現(xiàn)一個(gè)接口,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

定理1:C++接口是依賴的終點(diǎn)。接口不需要依賴任何東西。

推論1:依賴C++接口是安全的。不會帶來更多的依賴關(guān)系。

推論2:當(dāng)我們需要依賴時(shí),我們必須盡量做到:我們依賴的是接口。而不是實(shí)際的東西。

前面的WNS的例子中,是函數(shù)指針接口的應(yīng)用。下面舉出一個(gè)純虛類的例子。

假設(shè)我們制作了一個(gè)對話框(MyDlg)。我在對話框上添加了一個(gè)控件(MyCtrl)。MyCtrl派生于一個(gè)基類MyCtrlBase,該Base類有一個(gè)虛函數(shù):

virtual void OnClick() = 0;

該控件被點(diǎn)擊的時(shí)候,則OnClick會被調(diào)用。現(xiàn)在的意圖是,該控件被點(diǎn)擊的時(shí)候,我的對話框發(fā)生某種變化,比如說,MyDlg::OnMyCtrlClick()被調(diào)用。這如何實(shí)現(xiàn)呢? 最常見的但是也是錯(cuò)誤的方法如下首先是MyDlg:

class MyDlg : public MyDlgBase   {   public virtual void OnMyCtrlClick()   { … }   private: MyCtrl * m_myCtrl;    class MyCtrl : public MyCtrlBase   { public: virtual void OnClick();   private:   MyDlgCtrl *m_parentDlg; };

我確實(shí)實(shí)現(xiàn)了。但是這個(gè)實(shí)現(xiàn)方法真的很愚蠢。因?yàn)镸yCtrl和MyDlg完全依賴了對方。任何一個(gè)都不能脫離對方而被重用。MyDlg依賴MyCtrl尚可以理解。因?yàn)檫@個(gè)對話框中含有這個(gè)控件。但是MyCtrl為何要依賴MyDlg呢?這是完全沒有必要的。我自己是一個(gè)控件,沒有理由理會我在哪個(gè)窗口里。

無論在哪個(gè)窗口里,都是一樣的作用。 當(dāng)對話框上有多個(gè)不同控件時(shí),情況會更加復(fù)雜。最終的結(jié)果,導(dǎo)致全部的組件之間都互相依賴,沒有任何一個(gè)部分是可以重用的。 正確的方法是抽象出一個(gè)接口。這個(gè)C++接口叫做“點(diǎn)擊接收者”。

下面再舉我們在Capsuit的開發(fā)中,碰到的一個(gè)問題。情況是這樣的:我們的軟件,要對計(jì)算機(jī)進(jìn)行全面的檢查。包括檢查硬件,檢查操作系統(tǒng)信息,檢查注冊表,檢查進(jìn)程,以及運(yùn)行的服務(wù)等等,來判斷當(dāng)前計(jì)算機(jī)是否正常。

本人負(fù)責(zé)開發(fā)檢查部分。這個(gè)部分的任務(wù)是,根據(jù)外部輸入的需求,來調(diào)用相應(yīng)的實(shí)際進(jìn)行檢查的函數(shù)。這些函數(shù)則由各個(gè)不同部門的同仁實(shí)現(xiàn)好。本人只要調(diào)用他們就可以了。

struct condition { string check_type; // 告訴我檢查的類型, string param1; // 檢查的參數(shù),比如說是哪個(gè)注冊表項(xiàng)要檢查,等等 string param2; // 同上,都是取決于不同類型的檢查而不同的參數(shù) };

關(guān)于C++中怎么實(shí)現(xiàn)一個(gè)接口問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI