標(biāo)題: VI C++第四部分面向?qū)ο笈c泛型編程 [打印本頁] 作者: liumei 時(shí)間: 2014-4-29 20:12 標(biāo)題: VI C++第四部分面向?qū)ο笈c泛型編程 C/C++終于告一段落了,語言層結(jié)束,自然就開始工具層,所以我決定接下來把主要目標(biāo)轉(zhuǎn)向Linux C和數(shù)據(jù)庫Oracle/SQL了,雖然之前接觸了一些,但認(rèn)識(shí)的都比較淺,沒把精力放在這兩個(gè)工具上,用的也很少,就像沒用過,比如Linux系統(tǒng)的動(dòng)態(tài)庫、多線程、文件操作、內(nèi)存管理、信號(hào)通信等等,Oracle的數(shù)據(jù)的查詢、創(chuàng)建、更改、刪除、處理各種數(shù)據(jù)等等。至于說數(shù)據(jù)結(jié)構(gòu)只好再緩緩,熟練的操作順序表就行了,以后再研究樹形結(jié)構(gòu)和圖結(jié)構(gòu)的代碼。
至于說C++最后的第四部分面向?qū)ο缶幊毯头盒途幊炭梢哉f是壓軸戲,前面所有的知識(shí)點(diǎn)都是為它們打基礎(chǔ),第一部分的數(shù)據(jù)類型、基本語法、數(shù)組、函數(shù)、指針、結(jié)構(gòu)體講的是比較基礎(chǔ)的部分,雖然內(nèi)容比較多,但如果是會(huì)了C之后就能夠很快上手,盡管語法還是有些區(qū)別,多添加了一些東西,除了函數(shù)的重載、io流、命名空間、引用,內(nèi)存分配的關(guān)鍵字,其他基本一樣,第一部分之后接下來是第二部分,容器與算法,記得當(dāng)時(shí)學(xué)這個(gè)我記得好糾結(jié)�?梢哉f是基礎(chǔ)模板STL為泛型編程打基礎(chǔ),話說有了它就相當(dāng)于高級(jí)語言java那樣不需要用指針,直接調(diào)用各種官方封裝好的模板函數(shù),既然像高級(jí)語言,操作也就不需要再去寫底層的東西了,管你是用快速、插入、冒泡排序,一個(gè)sort就可以讓容器所有數(shù)值從小到大排好,數(shù)據(jù)結(jié)構(gòu)也不需要再去寫了,容器list就是鏈表,deque就是隊(duì)列,stack就是堆棧。這樣就能夠直接拿來用了,迭代器替換了指針,容器替換了數(shù)組,也不需要操作內(nèi)存了,這一點(diǎn)無疑和java相似。也因此C++有STL的關(guān)系可以當(dāng)高級(jí)語言用,也可以當(dāng)?shù)图?jí)語言用,雖然官方說過數(shù)組和指針盡量少用,而容器和迭代器多用,不過個(gè)人喜歡怎么用那就怎么用吧。再就是由于C++完全兼容C,因此C++用純C語法寫那是完全可以的。第三部分的類與數(shù)據(jù)抽象描述了類的使用,如何封裝一個(gè)類,如何寫一個(gè)類的各種成員函數(shù),使用一個(gè)類,并定義公共成員、保護(hù)成員和私有成員。
最后到第四部分就開始匯總了,也就是最終Boss,兩個(gè)分支,一個(gè)面向?qū)ο缶幊�,一個(gè)泛型編程。
面向?qū)ο缶幊叹烷_始同時(shí)操作幾個(gè)類,幾個(gè)類的關(guān)系就像人和人之間的關(guān)系一樣,要么就是上下級(jí)關(guān)系,要么就是同級(jí)關(guān)系,要么就沒有關(guān)系。因此上下級(jí)關(guān)系就像父類和子類,也稱基類和派生類,和生活中父親的遺產(chǎn)給兒子一樣,父類的東西通過繼承來給子類的,不過三種繼承方式用的最多的還是公共繼承,因?yàn)檫@樣就不會(huì)改變成員的屬性,能夠安全的一代代的傳承下去。水往下流,兒子可以用老爸,甚至爺爺?shù)臇|西,程序也一樣,子類能夠父類的東西,反過來卻不行了。同級(jí)關(guān)系出現(xiàn)的就是類的類,也就是類的嵌套,看他們做項(xiàng)目的時(shí)候有的時(shí)候出現(xiàn)了7層嵌套,我了個(gè)去,只是指一個(gè)類成員變量就要寫成one -> two -> three -> four -> five -> six -> seven,看的我都郁悶了,有點(diǎn)像看多級(jí)指針的味道,沒事做干嘛要寫到4級(jí)甚至更高級(jí),4級(jí)是3級(jí)的地址,3級(jí)是2級(jí)的地址,2級(jí)是1級(jí)的地址,1級(jí)是變量的地址。。。。。。本來嵌套多了就不是好事。由于上下級(jí)關(guān)系和同級(jí)關(guān)系不可能只是一對(duì)一,有時(shí)是一對(duì)多的關(guān)系,這樣更加復(fù)雜了,有的人有很多兄弟也有很多兒子,想想就很復(fù)雜,程序于是就因此產(chǎn)生了多態(tài),也就是同一個(gè)名字,但是在不同的類中名字雖然相同但它們本質(zhì)卻不同,于是就產(chǎn)生了虛函數(shù)和虛基類,可以很好的控制它們,用起來也很方便,也不需要用命名空間的方法來區(qū)別這些名字一樣的家伙,這樣很是糾結(jié),一個(gè)虛基類就很好的搞定了。
泛型編程也就是高級(jí)STL部分,不同于面向?qū)ο�,它也有它的�?dú)特方法和算法來解決很多事情,這就是泛型編程,也就是說同一種程序可以用C語言體系實(shí)現(xiàn),也可以用C++的面向?qū)ο篌w系來實(shí)現(xiàn),當(dāng)然也能夠用STL體系實(shí)現(xiàn),所以現(xiàn)在方法更多了,不過如果說同一種程序,最簡(jiǎn)單的還是數(shù)STL模板,雖然剛開始覺得模板挺復(fù)雜的,但用多了自然也習(xí)慣了比如一個(gè)容器的容器定義一個(gè)迭代器還是前期看來還是比較糾結(jié)的,比如一個(gè)向量容器的映射關(guān)聯(lián)容器的迭代器:vector<map<int,string> >::iterator iter;,不過呢最復(fù)雜的還是純C,剛接觸認(rèn)為C語言最簡(jiǎn)單,但其實(shí)完全學(xué)好純C還是不容易啊,比如純C實(shí)現(xiàn)面向?qū)ο蠊δ芫筒皇悄敲春脤懥耍俦热缂僀寫關(guān)聯(lián)容器并且封裝里面的各種操作,那這。。。。。。從語言層面來講也是的,在編譯的時(shí)候STL首先轉(zhuǎn)換成C++,然后C++轉(zhuǎn)換成C,最后C轉(zhuǎn)換成匯編的機(jī)器語言,因此在運(yùn)行程序的時(shí)候是從高級(jí)往低級(jí)轉(zhuǎn)換的,越低級(jí)的語言難度也就越大的說。所以呢匯編語言我可是沒有信心學(xué)好的,以后也不會(huì)打算研究它,如果有必要頂多再去學(xué)學(xué)java、PHP、C#了。
好了關(guān)于C++到此為止吧,如果繼續(xù)下去的話不知道要到什么時(shí)候了,這玩意沒有最精,只有更精通的,目前能夠按照自己的思路寫各種基本代碼就ok了,剩下的以后再說,接著要把精力放在工具上了,數(shù)據(jù)庫、Linux C (UC)、window32、MFC下半年的任務(wù)啊平均下來一個(gè)科目主攻倆月。