找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2548|回復: 0
打印 上一主題 下一主題
收起左側

VI C++第四部分面向對象與泛型編程

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表