c++学习笔记之基础篇
生活随笔
收集整理的這篇文章主要介紹了
c++学习笔记之基础篇
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這個(gè)系列整理了一下學(xué)習(xí)c++的知識(shí)點(diǎn),本篇簡(jiǎn)單提及一些基礎(chǔ)的東西,涉及到一些具體的知識(shí)后面的篇章會(huì)細(xì)說(shuō)。
1、基本類型取值范圍
在c++中,int、long、double、short、float等的取值范圍不是固定的,是與系統(tǒng)有關(guān)的,與Java不同。2、引用參數(shù):
在參數(shù)類型后面加&即可,如: int &count 引用參數(shù)與原參數(shù)指向同一地址,是原參數(shù)的別名而已。與傳值參數(shù)的區(qū)別: int m = n; int &m = n; 第一條是值參數(shù),將n的值賦予m,m和n沒(méi)有關(guān)系。 第二條是引用參數(shù),將n的引用賦予m,m只是n的別名,當(dāng)n或m值改變時(shí)另外一個(gè)也會(huì)跟著改變3、防止“==”和“=”混淆
在c++中,如果“==”和“=”使用錯(cuò)誤(如該使用“==”的地方使用了“=”),由于c++和Java不同,很多時(shí)候并不報(bào)錯(cuò)。比如在if判斷語(yǔ)句中 if(n = 1) 并不會(huì)報(bào)錯(cuò)(在Java中就會(huì)報(bào)錯(cuò)),因?yàn)閏++中任何非零值都當(dāng)成true。 為了防止混淆,在“==”語(yǔ)句中一般將變量放在右邊,如: 7==n 這樣的話當(dāng)寫(xiě)錯(cuò)成“7=n”的時(shí)候編輯器就會(huì)報(bào)錯(cuò)。4、默認(rèn)實(shí)參
默認(rèn)實(shí)參:函數(shù)的某個(gè)參數(shù)不經(jīng)常使用,可以給函數(shù)形參一個(gè)默認(rèn)值,在調(diào)用該函數(shù)時(shí)可以忽略這個(gè)參數(shù)。 默認(rèn)實(shí)參必須是函數(shù)參數(shù)列表最靠右邊的參數(shù)。當(dāng)調(diào)用具有多個(gè)默認(rèn)實(shí)參的函數(shù)時(shí),如果省略的實(shí)參不是形參列表中最靠右的參數(shù),那么該實(shí)參右邊的所有參數(shù)也必須被省略。如: 函數(shù)原型 int volume(int length = 1, int width = 1, int height = 1); 調(diào)用 volume() volume(10) volume(10, 8) volume(10, 8, 2) 都是可以的。5、一元作用域和二元作用域
作用域運(yùn)算符(::) 當(dāng)局部變量和全局變量有相同名字時(shí),用一元作用域分辨運(yùn)算符來(lái)區(qū)分。 在局部變量的作用域中,直接使用變量則使用的是局部變量,而加上(::)來(lái)使用變量則使用的是全局變量,如: int number = 10; void get(){int number = 1;number = 2; //這時(shí)是給局部變量number賦值::number = 3; //這時(shí)是給全局變量number賦值 } 當(dāng)局部變量和類作用域變量有相同名字時(shí),用二元作用域分辨運(yùn)算符來(lái)區(qū)分。 與上面類似,加上(類型::)來(lái)使用變量是類作用域變量。 注意區(qū)分類作用域變量和全局變量,全局變量不在類內(nèi)部。6、重載與默認(rèn)參數(shù)
當(dāng)函數(shù)有默認(rèn)參數(shù)時(shí),重載時(shí)要格外注意,防止出現(xiàn)二義性。如: 函數(shù)原型 int volume(int length = 1, int width = 1, int height = 1); 重載函數(shù) int volume(int length, int width) 這樣的話當(dāng)調(diào)用volume(2, 3)時(shí)編譯器就不知道選擇哪個(gè)函數(shù)。7、函數(shù)模板
所謂函數(shù)模板實(shí)際上是建立一個(gè)通用函數(shù),其涵涵素類型額形參類型不具體指定,用一個(gè)虛擬的類型來(lái)代表,這個(gè)通用函數(shù)就稱為函數(shù)模板。 凡是函數(shù)體相同的函數(shù)都可以用這個(gè)模板來(lái)代替,不必定義多個(gè)函數(shù),只需要在模板中定義一次即可。在調(diào)用函數(shù)時(shí),系統(tǒng)會(huì)根據(jù)實(shí)參的類型來(lái)取代模板中的虛擬類型,從而實(shí)現(xiàn)了不同函數(shù)的功能。 類似java中的泛型。詳細(xì)見(jiàn):C++中函數(shù)模板的用法詳細(xì)解析_There is a Bug!!!-CSDN博客 定義函數(shù)模板的一般形式為:template <typename T>或者template <class T> 例如: template<typename T> T n_add(T a,T b){} 可以替代: int n_add(int a,int b) double n_add(double a,double b) 等函數(shù),不必重復(fù)定義這么多函數(shù)了。8、求值順序
c++中沒(méi)有指定大多數(shù)運(yùn)算符其操作數(shù)的求值順序。只明確指定了“&&”、“||”、“,”、“?:”這四種運(yùn)算符的操作數(shù)的求值順序。 所以不能直接認(rèn)為操作數(shù)的順序是從左向右的,不同的編譯器可能順序不同。 如: int c; int a(){return c + 2; } int b(){return c++; } a() + b(); 不能直接認(rèn)為a()一定在b()前運(yùn)算,所以在做改變了操作數(shù)中自身值得運(yùn)算一定要格外小心。9、常量的聲明和賦值
使用const限定符聲明一個(gè)常量變量,常量變量必須在聲明時(shí)用一個(gè)常量表達(dá)式來(lái)初始化,而且之后不能修改。 聲明常量是沒(méi)有賦值,是一個(gè)編譯錯(cuò)誤。 在可執(zhí)行語(yǔ)句中給常量變量賦值也是一個(gè)編譯錯(cuò)誤。10、setfill
填充指定字符,是粘性的。所以一條語(yǔ)句中setfill后面的都會(huì)進(jìn)行填充。 注意:因?yàn)槭钦承缘?#xff0c;所以setfill之后如果不再需要填充一定要恢復(fù)。11、拷貝構(gòu)造函數(shù)
必須以引用的形式接收參數(shù),而非值,否則會(huì)無(wú)窮遞歸。 因?yàn)槿绻侵档男问?#xff0c;在調(diào)用拷貝構(gòu)造函數(shù)時(shí),會(huì)傳一份拷貝,這樣又調(diào)用了拷貝函數(shù),產(chǎn)生了無(wú)限遞歸。12、虛懸指針
如果兩個(gè)對(duì)象都指向同一內(nèi)存,一個(gè)對(duì)象回收時(shí)析構(gòu)函數(shù)會(huì)刪除這塊內(nèi)存的分配。另外一個(gè)對(duì)象就變成了虛懸指針,會(huì)引起運(yùn)行錯(cuò)誤。13、函數(shù)返回局部變量
返回局部變量引用或指針是常見(jiàn)的錯(cuò)誤,因?yàn)榫植孔兞吭诤瘮?shù)完成就回收了。?
總結(jié)
以上是生活随笔為你收集整理的c++学习笔记之基础篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++中函数模板的用法详细解析
- 下一篇: c++学习笔记之数组及vector