怎样学c++程序语言,如何学好 C++——学习门槛最高的编程语言
根據(jù)InfoQ 編程語(yǔ)言 2 月排行榜,統(tǒng)計(jì)發(fā)現(xiàn),學(xué)習(xí)門(mén)檻最高的編程語(yǔ)言是 C++。那么如何學(xué)好這門(mén)又難、門(mén)檻又高的語(yǔ)言呢?
前面我們介紹過(guò)C++。
C++是一種面向?qū)ο蟮挠?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,由美國(guó)AT&T貝爾實(shí)驗(yàn)室的本賈尼·斯特勞斯特盧普博士在20世紀(jì)80年代初期發(fā)明并實(shí)現(xiàn),最初它被稱作“C with Classes”(包含類的C語(yǔ)言)。它是一種靜態(tài)數(shù)據(jù)類型檢查的、支持多重編程范式的通用程序設(shè)計(jì)語(yǔ)言,支持過(guò)程化程序設(shè)計(jì)、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì)等多種程序設(shè)計(jì)風(fēng)格.
C++是C語(yǔ)言的繼承,進(jìn)一步擴(kuò)充和完善了C語(yǔ)言,成為一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。
C++以其復(fù)雜的語(yǔ)法、指針、內(nèi)存管理、泛型編程等特性難倒了一大批IT學(xué)子。小編以CSharp入門(mén),中途轉(zhuǎn)C++的時(shí)候痛苦過(guò)一段時(shí)間,不過(guò)隨著業(yè)務(wù)能力的精進(jìn),已經(jīng)逐漸愛(ài)上這門(mén)功能強(qiáng)大、靈活的語(yǔ)言了。
下面就分享一下學(xué)習(xí)經(jīng)驗(yàn):
關(guān)于如何學(xué)習(xí)C++,這個(gè)問(wèn)題光嘴講是沒(méi)用的,還是需要自己動(dòng)眼、動(dòng)手、動(dòng)腦。總結(jié)下來(lái)就無(wú)非這三個(gè)步驟:
1.學(xué)
學(xué),不管是看書(shū)、看視頻、還是參參加培訓(xùn)都可以,至少要系統(tǒng)化且持續(xù)性的去學(xué)習(xí)這門(mén)語(yǔ)言。個(gè)人建議如果有條件參加培訓(xùn)是最好的,如果沒(méi)有可以看視頻學(xué)習(xí)。但是不管是哪種方式,我都推薦大家一定要看書(shū),跟著書(shū)本學(xué)習(xí)。不管你是培訓(xùn)還是看視頻,思路都是跟著別人走的,只有看書(shū)才會(huì)有自己的理解,才更深刻。
2.抄
抄,此處意為對(duì)著教程上的代碼抄或者半key半抄,至少要將項(xiàng)目通過(guò)自己的手實(shí)現(xiàn),并且能正常運(yùn)行。這個(gè)過(guò)程是十分痛苦的。很多人可能在學(xué)知識(shí)的時(shí)候覺(jué)得自己都會(huì),但是一到自己key的時(shí)候就捉襟見(jiàn)肘了,甚至對(duì)著抄debug時(shí)仍是一大堆錯(cuò)誤,這段時(shí)間是懷疑人生的時(shí)間,一定要堅(jiān)持、堅(jiān)持、再堅(jiān)持。
比如最簡(jiǎn)單的helloword、文件讀取、標(biāo)準(zhǔn)流輸入輸出等
int main()
{
printf("hello word") ;
cout<
int a ;
cin>>a
}
3.寫(xiě)
等熟練到一定程度,就需要自己是獨(dú)立實(shí)現(xiàn)一個(gè)小功能或者開(kāi)發(fā)一個(gè)小項(xiàng)目了,這中間一定會(huì)遇到很多問(wèn)題,可以查資料、查教材、咨詢其他人等。等你能獨(dú)立實(shí)現(xiàn)自己想實(shí)現(xiàn)的功能的時(shí)候,那么恭喜你已經(jīng)入門(mén)了,后面會(huì)越來(lái)越順利。
下面總結(jié)一些C++學(xué)習(xí)的難點(diǎn):
指針
關(guān)于指針已經(jīng)講過(guò)很多次了。理解指針你需要先理解計(jì)算機(jī)內(nèi)存和內(nèi)存地址概念,還有*和&運(yùn)算符。
比喻式理解:
內(nèi)存可以理解為土地,內(nèi)存地址理解為土地編號(hào),當(dāng)我們的程序在創(chuàng)建變量和對(duì)象時(shí),計(jì)算機(jī)會(huì)充當(dāng)規(guī)劃局的角色為變量和對(duì)象劃分一塊有編號(hào)的土地存放變量和對(duì)象,這就叫內(nèi)存,而編號(hào)就叫內(nèi)存地址。土地有使用期限(70年),期限后收回,計(jì)算機(jī)中變量和對(duì)象釋放時(shí)也會(huì)釋放內(nèi)存被回收。
指針:指針本身也是一個(gè)變量,類似int或者float類型,只不過(guò)int存放的是10、146等這樣的整型數(shù)據(jù),而指針變量存放的是內(nèi)存的地址。
*運(yùn)算符:取內(nèi)存地址上所存對(duì)象。
&運(yùn)算符:取對(duì)象所在內(nèi)存的地址。
指針指向:我們常說(shuō)的某某指針指向誰(shuí),意思是,這個(gè)指針變量存放著那個(gè)對(duì)象在計(jì)算機(jī)內(nèi)存中的地址。
泛型編程
C++的泛型是基于模板實(shí)現(xiàn)的。不管是類模板或是函數(shù)模板,都不是真正的類或函數(shù),只是一個(gè)編譯器用來(lái)生成代碼的藍(lán)圖。
為什么需要泛型編程呢?
最簡(jiǎn)單的一個(gè)例子,假設(shè)你實(shí)現(xiàn)了一個(gè)鏈表的類,可以用來(lái)動(dòng)態(tài)存儲(chǔ)int型數(shù)據(jù)。但是現(xiàn)在又有一個(gè)需求是動(dòng)態(tài)存儲(chǔ)string類型的數(shù)據(jù),這時(shí)候你怎么辦呢?重新為存儲(chǔ)string數(shù)據(jù)的鏈表單再實(shí)現(xiàn)一個(gè)類?這顯然是不符合代碼重用性原則的,這時(shí)候你可能會(huì)想到能不能將數(shù)據(jù)類型用參數(shù)的方式傳進(jìn)去。這就是C++泛型編程的由來(lái);
函數(shù)模板
數(shù)據(jù)的類型也可以通過(guò)參數(shù)來(lái)傳遞,若在函數(shù)定義時(shí)可以不指明具體的數(shù)據(jù)類型,當(dāng)發(fā)生函數(shù)調(diào)用時(shí),編譯器才根據(jù)傳入的實(shí)參進(jìn)行自動(dòng)地推斷數(shù)據(jù)類型,這樣就實(shí)現(xiàn)了函數(shù)的模板。利用虛擬的類型來(lái)作為一個(gè)標(biāo)識(shí)符來(lái)占位,等發(fā)生函數(shù)調(diào)用時(shí)再根據(jù)傳入的實(shí)參來(lái)反向推斷出真正的類型。
void change(T& a,T& b)
{
T temp = a;
a = b ;
b = temp ;
}
上面的代碼實(shí)現(xiàn)了一個(gè)兩個(gè)數(shù)交換的通用模板函數(shù),T類型就是那個(gè)占位標(biāo)識(shí)符。該模板實(shí)現(xiàn)了一個(gè)函數(shù)可以交換任意數(shù)據(jù)類型的兩個(gè)參數(shù)。
測(cè)試一下
int a = 10,b = 20 ;
change(a,b);
cout<
string c = "i love u",d = "i love u too";
change(c,d);
cout<
template或template都可以,并且T類型參數(shù)可以有多個(gè):template
類模板
類模板中定義的類型參數(shù)可以用在類聲明和類實(shí)現(xiàn)中。類模板的目的同樣是將數(shù)據(jù)的類型參數(shù)化。
template
class MyClass
{
public:
MyClass(T1& a ,T2& b):a_(a),b_(b){} ;
T1& Func1();
void Func2(T2& x);
private:
T1 a_;
T2 b_ ;
};
template
T1& MyClass::Func1()
{
T1 temp = this->a_ ;
return &temp ;
}
template
void MyClass::Func2(T2& x)
{
this->b_ = x ;
}
STL
C++的泛型本來(lái)就是為了STL而推出的,STL(標(biāo)準(zhǔn)莫板塊) 包含常用數(shù)據(jù)結(jié)構(gòu)(如鏈表、可變長(zhǎng)數(shù)組、排序二叉樹(shù))和算法(如排序、查找)的模板。它是一個(gè)十分強(qiáng)大且實(shí)用的庫(kù)。
STL中容器即實(shí)現(xiàn)在類模板的基礎(chǔ)上。算法如排序、查找等算法是實(shí)現(xiàn)在函數(shù)模板的基礎(chǔ)上。
C++STL容器分順序容器和關(guān)聯(lián)容器。順序容器包括:可變長(zhǎng)動(dòng)態(tài)數(shù)組 vector、雙端隊(duì)列 deque、雙向鏈表 list。它們的元素與位置順序有關(guān),與元素大小無(wú)關(guān)。關(guān)聯(lián)容器包括:set、multiset、map、multimap。關(guān)聯(lián)容器內(nèi)的元素是排序的,元素的順序直接關(guān)聯(lián)元素本身,沒(méi)有物理順序。
任何容器都自帶迭代器函數(shù),他們是:
begin():返回指向容器中第一個(gè)元素的迭代器。
end():返回指向容器中最后一個(gè)元素后面的位置的迭代器。
rbegin():返回指向容器中最后一個(gè)元素的反向迭代器。
rend():返回指向容器中第一個(gè)元素前面的位置的反向迭代器。
舉報(bào)/反饋
總結(jié)
以上是生活随笔為你收集整理的怎样学c++程序语言,如何学好 C++——学习门槛最高的编程语言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于微信网名带颖字的网名103个
- 下一篇: 转到设置以激活(转到设置以激活windo