推薦壹本書 The C++ Annotations . C 語言向 C++ 過渡, 講的超細.
有壹點不太理解, 雖然 C++ 肯定不是 C with class, 不過, 我覺得這樣過渡挺好的. C -&> C with Class -&> C++.
另外, C++ 永遠大多時候避免不了高性能需求, 擺脫 C 是挺難的, 所以感覺沒辦法像學習其他語言壹樣, 完全當成壹門全新的語言去學習.
《c++ primer》這本書就比較適合。
C的東西相比於C++太少了……
建議在C基礎下從頭開始學C++
從new壹對象開始
C++是在c的基礎上增加了壹些特性和機制,這些特性和機制是為了面向對象而服務的。而c語言的編程主要是面向過程的。
如果要從c轉到C++,那就需要學習面向對象思維,學習如何用C++的方法去實現面向對象的編程。主要還是思維的轉變。
如何做到思維的轉變,可以通過學習面向對象的設計原則和設計模式來達到思維的轉變。
劉汝佳的紫書不是有cpp的內容。對著上面的cpp部分學就行。
起碼演算法題夠用(小聲)
c語言過渡到c++主要涉及下面幾方面
頭文件與命名空間
C語言沒有命名空間的概念,而C++有,最典型的是初學時經常用到的using namespace std; 代表使用命名空間std,或者使用std::functuion(); ,即函數、變數名前面加上空間名和域解析符來使用命名空間。命名空間可以嵌套定義。
為了統壹,C++會把C語言的stdio.h math.h string.h 等xxx.h格式的標準頭文件用 cstdio cmath cstring 等cxxx格式的C++頭文件來替代,從而保留了C語言的標準庫函數。
輸入輸出
C語言常用的是scanf printf 的函數,C++用的是cin cout 對象。C語言的方式更快而且格式控制更方便,而C++的方式能夠自動識別了輸入輸出的類型,自動轉換成合適的字元串。
bool 類型
C++用於判斷真與假的類型,其大小並沒有被規定。C++還有true false 關鍵字。
當然C語言也可以通過各種方式來定義和使用true和false,但不像C++那樣作為關鍵字,沒有C++來的可靠。比如 if(func() == true)就是危險的行為。
string 類型
C++語言處理字元串的類,相比於時刻需要註意越界和』』的字元數組,顯然更好用。由於構造函數的存在,char *類型的變數很容易構造出string類型。
當需要使用字元數組時,string類型也有相應的c_str函數。 不過註意函數返回的是臨時的常指針,如果需要對其修改,需要用strcpy()等函數復制出副本,再對副本操作。
const
C語言中的const代表該變數初始化之後,只能讀不能改。但是並不代表每次取值都是壹樣的,因為還可以通過其他方式修改變數。就像只讀方式打開文件壹樣,妳不能對他修改,但是如果這個文件可以被其他人修改,妳就不能保證每次讀到的內容是壹樣的。
C++對const的處理更加復雜,假如妳用const定義了壹個常量var,那麽它會被認為是壹個常量,哪怕對應地址的內容被強行修改了,訪問var時仍然得到的是修改前的內容。
變數定義位置
C語言中的C89標準規定,在代碼塊裏執行語句不能出現在變數定義語句之前。但是C++沒有這個限制,只要變數被使用時已經被聲明或定義即可。
動態內存管理
C語言只能用malloc等函數開辟壹塊堆內存,其大小需要計算,返回的指針需要類型轉換,內容需要手動去初始化。
而C++申請堆內存的時候可以調用構造函數,釋放時能使用析構函數,更方便更安全。
類型轉換
C語言可以用小括弧進行類型轉換。最常見的是malloc函數返回指針的類型轉換。
C++的類型轉換更加清晰嚴格,有四種 const_cast static_cast dynamic_cast reinterpret_cast
而且對於類來說,可以自定義類型轉換的函數。
默認參數與函數重載
C語言不支持默認函數和函數重載,需要定義更多的函數名。
C++支持默認參數和函數重載,可以大大減少工作量。
指針與引用
C++中,引用的指向不能改變,所以很多情況下C++引用能夠代替指針。
空指針
C語言有NULL宏,用於標記空指針
C++有nullptr關鍵字。c++不允許直接將void*隱式的轉化為其他類型,nullptr的類型為nullptr_t,能夠隱式的轉換為任何指針,所以用空指針就盡可能的使用nullptr。
智能指針
C++不同標準下定義了許多智能指針,用於自動回收不需要的動態內存,這壹點比C語言中的指針方便。
1.C和C++的區別: C語言可以在C++編譯器上完美運行,即C屬於C++ C++比C多出來壹些函數庫 C++是面向對象編程(即有class以及相關工具) 2.如何從C過渡到C++
2.1 代碼實例: (C語言版)uva11000.
#include& int main() { long long m = 0, fm = 1, sum = 1; int n,i; while(scanf("%d",n),n != -1){ m = 0, fm = 1, sum = 1; for(i = 0;i &< n;i++){ fm = m + 1; m = sum; sum = m + fm; } printf("%lld %lld ",m,sum); } return 0; }
重點不在於解上面這題,請將重點放在寫法。以上是C語言寫法,為什麽說是C語言寫法呢?因為上述代碼有幾個C獨有的特點:
第1行:#include& 第5行:scanf("%d",n) 第13行:printf("%lld %lld ",m,sum);
這三點也是C和C++最基本的區別,下面看C++版本:
#include& using namespace std; int main() { long long m = 0, fm = 1, sum = 1; int n,i; while(cin &>&> n,n != -1){ m = 0, fm = 1, sum = 1; for(i = 0;i &< n;i++){ fm = m + 1; m = sum; sum = m + fm; } cout &<&< m &<&< " " &<&< sum &<&< endl; } return 0; }
第1行:#include& 第2行:using namespace std; 第6行:cin &>&> n; 第14行:cout &<&< m &<&< " " &<&< sum &<&< endl; 其中第1行頭文件iostream,和C語言中的stdio.h類似,可以對比理解。 第2行的using namespace std 的意思是聲明使用命名空間std。可以不深入理解,只要寫C++就敲這壹行就可以了。(想了解的直接百度就可以,很簡單) 第6行:cin全名叫 標準輸入流。和C語言中的scanf用法類似,只是它用起來更為方便(大多數情況下),不需要區分不同的類型用不同的寫法,所有類型只需要用cin &>&> (變數名)就可以了。 第14行:和cin類似,cout是標準輸出流,與C中的printf類似,但是它也不用區分不同的類型用不同輸出符號,不管什麽類型只要用cout &<&< (變數名) 就可以了。其中endl相當於C語言中的 『 』 換行符。
2.2 初步掌握C++:
如果妳已經明白上面4個C++的特點的話,那現在妳用C編寫代碼有多順暢妳用C++就可以同樣順暢了。因為其他寫法(for、if、else……)和C完全相同。
3.如何利用C++的優點(提高):
壹開始就提到,C++和C的不同在於C++豐富的函數庫,其中最方便的是STL(壹個庫名)。很多書會講這壹個庫單獨拿出來講,其中包括壹些非常方便的容器(vector、map),現在看不懂也沒關系,這個是需要花時間學的。從C過渡到C++只需要壹個下午(C基礎好),但是學會使用C++的各種函數,需要花很久。
4.推薦書籍:
個人入門用的是《C++ primer plus》第六版。這本書很厚,但是不需要看完,就像用字典壹樣看它就可以(用來看各種函數定義)。然後是提高,建議買壹本專門講STl的書來深入掌握STL,因為它真的很重要。
瀉藥
推薦壹下,黑客教父王寶明,具體課程百度即可
多做多學,多琢磨,找規律,因為我現在也出於學習階段,我感覺這樣下去應該能夠成功