溫馨提示×

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

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

C++框架該如何正確理解

發(fā)布時(shí)間:2021-10-27 18:32:52 來(lái)源:億速云 閱讀:160 作者:柒染 欄目:編程語(yǔ)言

本篇文章為大家展示了C++框架該如何正確理解,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

C++編程語(yǔ)言中,有很多比較重要的內(nèi)容值得我們?nèi)ド钊胙芯?。這些基礎(chǔ)內(nèi)容的理解不但能幫助我們掌握C++,而且還能對(duì)其他語(yǔ)言的學(xué)習(xí)或多或少的有些幫助。

框架,在英文中叫做Framework。應(yīng)用程序框架就叫做Application Framework?,F(xiàn)在是framework滿天飛的時(shí)候,你沒(méi)有聽(tīng)過(guò)框架,但是你肯定聽(tīng)過(guò).net framework這個(gè)詞。否則微軟的廣告就做的太水了。當(dāng)然,.net framework是為了.net,其實(shí)主要是C#來(lái)做的,很多同學(xué)說(shuō),C++也可以啊,用CLR的C++就可以,不過(guò)帶CLR的C++還是C++嗎,而且既然用了CLR,為什么就不干脆來(lái)用C#呢?不過(guò)這個(gè)只是順便一說(shuō),因?yàn)槲乙矝](méi)有研究過(guò)CLR,也沒(méi)有用過(guò)CLR下的C++,沒(méi)有研究,沒(méi)有發(fā)言權(quán)。還是來(lái)談?wù)凜++下面的framework。

首先,要清楚的是沒(méi)有framework,我們能不能做開(kāi)發(fā),做應(yīng)用。想想是可以的哦。在沒(méi)有framework的時(shí)候,我們直接調(diào)用函數(shù),完成功能。just simple。

然后沒(méi)有framework和有framework,到底有什么區(qū)別。***的區(qū)別就是,沒(méi)有framework的時(shí)候,是我們call函數(shù),而有framework的時(shí)候,是framework來(lái)call我們。

比較老牌的C++的framework,應(yīng)該就是MFC了,MFC的全稱為Microsoft Foundation Class,也就是微軟基礎(chǔ)類庫(kù),那不還是類庫(kù)嗎?好像沒(méi)有提到framework啊。不過(guò)你細(xì)看里面函數(shù)的話,可以看到很多函數(shù)的前綴為Afx,Af也就是Application Framework了。

那C++的STL,全稱為Standard Template Library,也就是標(biāo)準(zhǔn)模板庫(kù),它是不是C++框架呢?我們看看它提供了些什么,它提供了字符串類,輸入輸出流,各種數(shù)據(jù)結(jié)構(gòu),以及算法。這些都是在我們的程序中,被我們調(diào)用來(lái)完成功能的,從我的觀點(diǎn),它不能算是框架,而只是一套類庫(kù)。

那MFC呢,為什么它算是C++框架呢?首先提起MFC,想到的是什么。應(yīng)該是界面吧。MFC提供了包括static,editbox,button,radio,list,tree等等控件,但是單單就是界面嗎?當(dāng)我們點(diǎn)擊按鈕時(shí),它會(huì)執(zhí)行動(dòng)作。這里面原來(lái)還綁定了函數(shù)。同時(shí)我們?cè)趯?duì)應(yīng)的函數(shù)中寫下比如一個(gè)MessageBox,那到時(shí)候就會(huì)執(zhí)行,顯示出這個(gè)消息框。這一切都是MFC在里面做,我們所需要做的,就是拖一個(gè)按鈕過(guò)來(lái),加上對(duì)應(yīng)的Buttonclick事件,然后在對(duì)應(yīng)的函數(shù)中加上對(duì)應(yīng)的實(shí)現(xiàn)就可以了。

原來(lái)framework就是,在我們寫我們的軟件之前,就將整個(gè)的執(zhí)行流程給我們規(guī)定好了,我們?cè)谝?guī)定的點(diǎn)填空,然后就可以完成應(yīng)用了。比如我在2009年寫一個(gè)軟件,但是MFC是在2000年(其實(shí)不是哈,舉例而已)就完成了。它怎么知道我要完成什么,然后再來(lái)調(diào)用我寫的這些函數(shù),最終完成功能。

其實(shí)現(xiàn)在一般來(lái)實(shí)現(xiàn)框架,都是使用了面向?qū)ο蠹夹g(shù),也就是我們常常聽(tīng)到,聽(tīng)得耳朵都生繭了,其實(shí)還沒(méi)有太明白的運(yùn)行時(shí)綁定,也就是面向?qū)ο笾蟹庋b,繼承,多態(tài)中的多態(tài)行為。但是MFC那時(shí),由于性能的原因,用虛函數(shù)比較少,主要用宏(在侯捷老師的書中叫做巨集,其實(shí)是一個(gè)東西)來(lái)完成,不過(guò)還是很多地方使用的虛函數(shù)。這個(gè)看深入淺出MFC來(lái)了解具體的原理吧。

作為framework,只需要定義一個(gè)superclass,然后你需要實(shí)現(xiàn)的時(shí)候,繼承這個(gè)superclass,無(wú)論是類,抽象類還是接口,然后實(shí)現(xiàn)它,這樣framework不需要知道你,它只需要知道superclass就可以運(yùn)行了。而且是它來(lái)調(diào)用你。

其實(shí)這兩天想了一下,除了面向?qū)ο笾?,我們C系統(tǒng)中用回調(diào)函數(shù),其實(shí)也就是函數(shù)指針,不也是用來(lái)實(shí)現(xiàn)讓其他人來(lái)調(diào)用,自己來(lái)實(shí)現(xiàn)被調(diào)用的部分嗎?哦,其實(shí)也就是現(xiàn)在常常提到的控制反轉(zhuǎn)(還是依賴反轉(zhuǎn))?不過(guò)C和C++的世界中,這些名詞提得比較少,一下子沒(méi)有聯(lián)系起來(lái)。

不過(guò)MFC完成的東西很多,windows消息的封裝,消息映射和消息路由是一部分,同時(shí)它也提供了CString等類給我們來(lái)使用,還提供了Document-View,還提供了序列化等等東西。

另外有名的C++框架,好像有個(gè)重量級(jí)的網(wǎng)絡(luò)開(kāi)發(fā)框架叫ACE的,但是沒(méi)有了解過(guò),僅僅是知道有這么一個(gè)東西。

linux算不算框架,從現(xiàn)在linux的驅(qū)動(dòng)開(kāi)發(fā),使用模塊來(lái)進(jìn)行開(kāi)發(fā)的角度,似乎也可以認(rèn)為這一套算是一個(gè)框架,只要注冊(cè)了模塊,那它就知道,也可以來(lái)調(diào)用。

另外,有插件機(jī)制的軟件,算不算框架?

我知道的有插件機(jī)制的軟件,比較古老的有Winamp,現(xiàn)在的有firefox,以及thunderbird這些Mozilla出的系列軟件,eclipse等,這些中eclipse肯定算是框架了,其他呢?

另外C++中,Qt,wXwidget等等,盡管沒(méi)有用過(guò),但是應(yīng)該也算是C++框架,而且是跨平臺(tái)的。

寫了一些東西,但是比較的亂,而且可能有些意思也沒(méi)有表達(dá)清楚,有空我還可以再整理整理,問(wèn)題很大,對(duì)于框架,還有很多要去學(xué)的。模式都沒(méi)有學(xué)好,也沒(méi)法去把框架談好。

上述內(nèi)容就是C++框架該如何正確理解,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

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

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

c++
AI