新聞中心
C++接口總是空的,或者虛的,C++接口和C++抽象類代表的就是抽象類型,就是我們需要提出的抽象層的具體表現(xiàn),它不實(shí)現(xiàn)任何東西,所以可以有以下的結(jié)論:

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括老城網(wǎng)站建設(shè)、老城網(wǎng)站制作、老城網(wǎng)頁(yè)制作以及老城網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,老城網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到老城省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
定理1:C++接口是依賴的終點(diǎn)。接口不需要依賴任何東西。
推論1:依賴C++接口是安全的。不會(huì)帶來(lái)更多的依賴關(guān)系。
推論2:當(dāng)我們需要依賴時(shí),我們必須盡量做到:我們依賴的是接口。而不是實(shí)際的東西。
前面的WNS的例子中,是函數(shù)指針接口的應(yīng)用。下面舉出一個(gè)純虛類的例子。
假設(shè)我們制作了一個(gè)對(duì)話框(MyDlg)。我在對(duì)話框上添加了一個(gè)控件(MyCtrl)。MyCtrl派生于一個(gè)基類MyCtrlBase,該Base類有一個(gè)虛函數(shù):
- virtual void OnClick() = 0;
該控件被點(diǎn)擊的時(shí)候,則OnClick會(huì)被調(diào)用?,F(xiàn)在的意圖是,該控件被點(diǎn)擊的時(shí)候,我的對(duì)話框發(fā)生某種變化,比如說(shuō),MyDlg::OnMyCtrlClick()被調(diào)用。這如何實(shí)現(xiàn)呢? 最常見(jià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完全依賴了對(duì)方。任何一個(gè)都不能脫離對(duì)方而被重用。MyDlg依賴MyCtrl尚可以理解。因?yàn)檫@個(gè)對(duì)話框中含有這個(gè)控件。但是MyCtrl為何要依賴MyDlg呢?這是完全沒(méi)有必要的。我自己是一個(gè)控件,沒(méi)有理由理會(huì)我在哪個(gè)窗口里。
無(wú)論在哪個(gè)窗口里,都是一樣的作用。 當(dāng)對(duì)話框上有多個(gè)不同控件時(shí),情況會(huì)更加復(fù)雜。最終的結(jié)果,導(dǎo)致全部的組件之間都互相依賴,沒(méi)有任何一個(gè)部分是可以重用的。 正確的方法是抽象出一個(gè)接口。這個(gè)C++接口叫做“點(diǎn)擊接收者”。#t#
下面再舉我們?cè)贑apsuit的開(kāi)發(fā)中,碰到的一個(gè)問(wèn)題。情況是這樣的:我們的軟件,要對(duì)計(jì)算機(jī)進(jìn)行全面的檢查。包括檢查硬件,檢查操作系統(tǒng)信息,檢查注冊(cè)表,檢查進(jìn)程,以及運(yùn)行的服務(wù)等等,來(lái)判斷當(dāng)前計(jì)算機(jī)是否正常。
本人負(fù)責(zé)開(kāi)發(fā)檢查部分。這個(gè)部分的任務(wù)是,根據(jù)外部輸入的需求,來(lái)調(diào)用相應(yīng)的實(shí)際進(jìn)行檢查的函數(shù)。這些函數(shù)則由各個(gè)不同部門的同仁實(shí)現(xiàn)好。本人只要調(diào)用他們就可以了。
- struct condition { string check_type; // 告訴我檢查的類型, string param1;
- // 檢查的參數(shù),比如說(shuō)是哪個(gè)注冊(cè)表項(xiàng)要檢查,等等 string param2;
- // 同上,都是取決于不同類型的檢查而不同的參數(shù) };
標(biāo)題名稱:淺析C++接口實(shí)現(xiàn)方法
轉(zhuǎn)載注明:http://www.dlmjj.cn/article/djijosd.html


咨詢
建站咨詢
