C++以其複雜的語法、指針、內存管理、泛型編程等特性難倒了一大批IT學子。小編以CSharp入門,中途轉C++的時候痛苦過一段時間,不過隨著業務能力的精進,已經逐漸愛上這門功能強大、靈活的語言了。
下面就分享一下學習經驗
如何學習C++
關於如何學習C++,這個問題光嘴講是沒用的,還是需要自己動眼、動手、動腦。總結下來就無非這三個步驟:
學
學,不管是看書、看視頻、還是參參加培訓都可以,至少要系統化且持續性的去學習這門語言。個人建議如果有條件參加培訓是最好的,如果沒有可以看視頻學習。但是不管是哪種方式,我都推薦大家一定要看書,跟著書本學習。不管你是培訓還是看視頻,思路都是跟著別人走的,只有看書才會有自己的理解,才更深刻。
抄
抄,此處意為對著教程上的代碼抄或者半key半抄,至少要將項目通過自己的手實現,並且能正常運行。這個過程是十分痛苦的。很多人可能在學知識的時候覺得自己都會,但是一到自己key的時候就捉襟見肘了,甚至對著抄debug時仍是一大堆錯誤,這段時間是懷疑人生的時間,一定要堅持、堅持、再堅持。
比如最簡單的helloword、文件讀取、標準流輸入輸出等
int main()
{
\tprintf("hello word") ;
cout< int a ;
cin>>a
}
寫
等熟練到一定程度,就需要自己是獨立實現一個小功能或者開發一個小項目了,這中間一定會遇到很多問題,可以查資料、查教材、諮詢其他人等。等你能獨立實現自己想實現的功能的時候,那麼恭喜你已經入門了,後面會越來越順利。
C++知識難點總結
下面總結一些C++學習的難點
指針
關於指針已經講過很多次了。理解指針你需要先理解計算機內存和內存地址概念,還有*和&運算符。
比喻式理解:
內存可以理解為土地,內存地址理解為土地編號,當我們的程序在創建變量和對象時,計算機會充當規劃局的角色為變量和對象劃分一塊有編號的土地存放變量和對象,這就叫內存,而編號就叫內存地址。土地有使用期限(70年),期限後收回,計算機中變量和對象釋放時也會釋放內存被回收。
指針:指針本身也是一個變量,類似int或者float類型,只不過int存放的是10、146等這樣的整型數據,而指針變量存放的是內存的地址。
*運算符:取內存地址上所存對象。
&運算符:取對象所在內存的地址。
指針指向:我們常說的某某指針指向誰,意思是,這個指針變量存放著那個對象在計算機內存中的地址。
泛型編程
C++的泛型是基於模板實現的。不管是類模板或是函數模板,都不是真正的類或函數,只是一個編譯器用來生成代碼的藍圖。
為什麼需要泛型編程
最簡單的一個例子,假設你實現了一個鏈表的類,可以用來動態存儲int型數據。但是現在又有一個需求是動態存儲string類型的數據,這時候你怎麼辦呢?重新為存儲string數據的鏈表單再實現一個類?這顯然是不符合代碼重用性原則的,這時候你可能會想到能不能將數據類型用參數的方式傳進去。這就是C++泛型編程的由來;
函數模板
數據的類型也可以通過參數來傳遞,若在函數定義時可以不指明具體的數據類型,當發生函數調用時,編譯器才根據傳入的實參進行自動地推斷數據類型,這樣就實現了函數的模板。利用虛擬的類型來作為一個標識符來佔位,等發生函數調用時再根據傳入的實參來反向推斷出真正的類型。
void change(T& a,T& b)
{
\tT temp = a;
\ta = b ;
\tb = temp ;
}
上面的代碼實現了一個兩個數交換的通用模板函數,T類型就是那個佔位標識符。該模板實現了一個函數可以交換任意數據類型的兩個參數。
測試一下
int a = 10,b = 20 ;
\tchange(a,b);
\tcout<
閱讀更多 編程老大叔 的文章