負(fù)數(shù)補(bǔ)碼 = 反碼 + 1
正數(shù)補(bǔ)碼 = 原碼
基本數(shù)據(jù)類型:
(整數(shù);實(shí)數(shù)桶现;字符;布爾)類型
(signed/unsigned) signed char
<= (unsigned) short int
<= (unsigned) int
<= (unsigned) long int
<= long long int
整數(shù)常量:
- 十進(jìn)制
- 八進(jìn)制
- 十六進(jìn)制
后綴:L / LL / U
浮點(diǎn)常量默認(rèn)為double型傲霸,如果后綴F(或f)可以使其成為float
初始化:
int a = 0
int a(0)
int a = {0}
int a{0}
其中使用大括號的初始化方式稱為列表初始化,列表初始化時不允許信息的丟失互站。例如使用double值初始化int變量,就會造成數(shù)據(jù)的丟失僵缺。
逗號運(yùn)算符:
表達(dá)式1胡桃,表達(dá)式2
求解順序及結(jié)果:
先求解表達(dá)式1,再求解表達(dá)式2
最終結(jié)果為表達(dá)式2的值
例:
a = 3 * 5, a * 4最終結(jié)果為60
條件運(yùn)算:
表達(dá)式1磕潮?表達(dá)式2:表達(dá)式3
條件表達(dá)式的最終類型為2和3中較高的類型
sizeof運(yùn)算符:
sizeof(類型名) 或 sizeof 表達(dá)式
位運(yùn)算符:
- 按位與(&):只有當(dāng)對應(yīng)位都為1翠胰,則新值中相應(yīng)位為1,否則為0
- 按位或(|):如果對應(yīng)位至少有一個為1自脯,則新值中相應(yīng)位為1之景,否則為0
- 按位異或(^): 若對應(yīng)位相同,則結(jié)果該位為0膏潮;若對應(yīng)位不同锻狗,則結(jié)果該位為1
- 按位取反(~):單目運(yùn)算符,對一個二進(jìn)制位按位取反
位運(yùn)算:
- 左移運(yùn)算(<<)
左移后焕参,低位補(bǔ)0轻纪,高位舍棄 - 右移運(yùn)算(>>)
右移后:
低位:舍棄
高位- 無符號數(shù):補(bǔ)0
- 有符號數(shù):補(bǔ)“符號位”
隱含轉(zhuǎn)換就時把低類型數(shù)據(jù)轉(zhuǎn)換為高類型數(shù)據(jù)
顯式轉(zhuǎn)換:
類型說明符(表達(dá)式)
(類型說明符)表達(dá)式
類型轉(zhuǎn)換操作符<類型說明符>(表達(dá)式)
類型轉(zhuǎn)換操作符:const_cast、dynamic_cast龟糕、reinterpret_cast桐磁、static_cast
例:int(z),(int)z,static_cast<int>(z)三種完全等價
其他控制語句
- break語句:
使程序從循環(huán)體和switch語句內(nèi)跳出悔耘,繼續(xù)執(zhí)行邏輯上的嚇一條語句讲岁。不宜用在別處。 - continue語句:
結(jié)束本次循環(huán)衬以,接著判斷是否執(zhí)行下一次循環(huán) - goto語句:
使程序的執(zhí)行流程跳轉(zhuǎn)到居于標(biāo)號所指定的語句缓艳。不提倡使用。
類型別名:為已有類型另外命名
- typedef 已有類型名 新類型名表
typedef double Area,Volume;
typedef int Natural;
Natural i1,i2;
Area a;
Volume v;
- using 新類型名 = 已有類型名
using Area = double
using Volume = double
不限定作用域枚舉類型說明:
- 枚舉元素使常量看峻,不能對它們賦值
enum Weekday {SUN, MON, TUE, WED, THU, FRI, SAT}
不能寫賦值表達(dá)式:SUN = 0 - 枚舉元素具有默認(rèn)值阶淘,它們依次為:0,1,2,......
- 也可以在聲明時另行指定枚舉元素的值
如:enum Weekday{SUN=7,MON=1,TUE,WED,THYU,FRI,SAT}
- 枚舉值可以進(jìn)行關(guān)系運(yùn)算
- 整數(shù)值不能直接賦給枚舉變量
如需要將整數(shù)賦值給枚舉變量,應(yīng)進(jìn)行強(qiáng)制類型轉(zhuǎn)換 - 枚舉值可以賦給整型變量
auto類型與decltype類型
- auto:編譯器通過初始值自動推斷變量的類型
例如:auto val = val1 + val2
- decltype:定義一個變量與某一表達(dá)式類型相同互妓,但并不用該表達(dá)式初始化變量
例如:decltype(i)j = 2
表示j以2作為初始值溪窒,類型與i一致
struct結(jié)構(gòu)的作用是把一組相互關(guān)聯(lián)的數(shù)據(jù)整合在一起
函數(shù)定義的語法形式:
類型標(biāo)識符 函數(shù)名(形式參數(shù)表)
{
語句序列
}
函數(shù)原型:類型標(biāo)識符 被調(diào)用函數(shù)名(含類型說明的形參表)
遞歸調(diào)用:函數(shù)直接或間接調(diào)用自身
回文:各位數(shù)字左右對稱的整數(shù)
rand函數(shù):
函數(shù)原型:int rand(void);
所需頭文件:<cstdlib>
功能和返回值:求出并返回一個偽隨機(jī)數(shù)
srand函數(shù):
原型:void srand(unsigned int seed)
參數(shù):seed產(chǎn)生隨機(jī)數(shù)的種子
所需頭文件:<cstdlib>
功能:為使rand()產(chǎn)生一序列偽隨機(jī)數(shù)而設(shè)置起始點(diǎn)。使用1作為seed參數(shù)可以重新初化rand()
用遞歸法計(jì)算從n個人中選k個人組成一個委員會的不同組合數(shù)
分析
- 由n個人里選k個人的組合數(shù)=由n-1個人里選k個人的組合數(shù)+由n-1個人里選k-1個人的組合數(shù)
- 當(dāng)n=k或k=0時組合數(shù)為1
將n個盤子從A針移到C針可以分解為三個步驟:
- 將A上的n-1個盤子移到B針上(借助C針);
- 把A針上剩下的一個盤子移到C針上;
- 把n-1個盤走從B針移到C針上(借助A針)
函數(shù)的參數(shù)傳遞:
- 在函數(shù)被調(diào)用時才分配形參的存儲單元
- 實(shí)參可以是常量冯勉、變量或表達(dá)式
- 實(shí)參類型必須與形參相符
- 值傳遞是傳遞參數(shù)值,即單向傳遞
- 引用傳遞可以實(shí)現(xiàn)雙向傳遞
- 常引用作參數(shù)可以保障實(shí)參數(shù)據(jù)的安全
引用類型:
- 引用(&)是標(biāo)識符的別名
- 定義一個引用時,必須同時對它進(jìn)行初始化,使它指向一個已存在的對象
- 例如:
int i,j;
int &ri = i;//定義int引用ri澈蚌,并初始化為變量i的引用
j = 10;
ri = j;//相當(dāng)于i = j
- 一旦一個引用被初始化后,就不能改為指向其它對象
- 引用可以作為形參
內(nèi)聯(lián)函數(shù):
通常的做法是省略原型灼狰,將整個定義(即函數(shù)頭和所有函數(shù)代碼)放在本應(yīng)提供原型的地方
- 編譯時在調(diào)用處用函數(shù)體進(jìn)行替換
- 節(jié)省了參數(shù)傳遞
- 控制轉(zhuǎn)移等開銷
注意: - 內(nèi)聯(lián)函數(shù)體內(nèi)不能有循環(huán)語句和switch語句;
- 內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前;
- 對內(nèi)聯(lián)函數(shù)不能進(jìn)行異常接口聲明宛瞄。
默認(rèn)參數(shù)值:
- 可以預(yù)先設(shè)置默認(rèn)的參數(shù)值,調(diào)用時如給出實(shí)參交胚,則采用實(shí)參值份汗,否則采用預(yù)先設(shè)置的默認(rèn)參數(shù)值盈电。
- 例:
int add(int x = 5,int y = 6) {
return x + y;
}
int main() {
add(10,20); //10+20
add(10); //10+6
add(); //5+6
}
默認(rèn)參數(shù)值的說明次序:
- 有默認(rèn)參數(shù)的形參必須列在形參列表的最右,即默認(rèn)參數(shù)值的右面不能有無默認(rèn)值的參數(shù);
- 調(diào)用時實(shí)參與形參的結(jié)合次序是從左向右杯活。
- 例:
int add(int x,int y = 5,int z = 6);//正確
int add(int x = 1,int y = 5,int z);//錯誤
int add(int x = 1,int y,int z = 6);//錯誤
默認(rèn)參數(shù)值與函數(shù)的調(diào)用位置:
- 如果一個函數(shù)有原型聲明匆帚,且原型聲明在定義之前,則默認(rèn)參數(shù)值應(yīng)在函數(shù)原型聲明中給出旁钧;如果只有函數(shù)的定義卷扮,或函數(shù)定義之前,則默認(rèn)參數(shù)值可以函數(shù)定義中給出均践。
- 例:
int add(int x = 5,int y = 6);
//原型聲明在前
int main(){
add();
}
int add(int x,int y){
//此處不能再指定默認(rèn)值
return x + y;
}
int add(int x = 5, int y = 6){
//只有定義晤锹,沒有原型聲明
return x + y;
}
int main(){
add();
}
函數(shù)重載的概念:
- C++允許功能相近的函數(shù)在相同的作用域內(nèi)以相同函數(shù)名聲明,從而形成重載彤委。方便使用鞭铆,便于記憶。
注意事項(xiàng):
- 重載函數(shù)的形參必須不同:個數(shù)不同或類型不同焦影。
- 編譯程序?qū)⒏鶕?jù)實(shí)參和形參的類型及個數(shù)的最佳匹配來選擇調(diào)用哪一個函數(shù)车遂。
- 不要將不同功能的函數(shù)聲明為重載函數(shù),以免出現(xiàn)調(diào)用結(jié)果的誤解 斯辰、混淆
角度值轉(zhuǎn)化為弧度 :
弧度 = 角度值*PI / 180
類與對象
- 對象: 現(xiàn)實(shí)中對象的模擬舶担,具有屬性和行為
- 同一類對象的共同屬性和行為。
- 定義對象時彬呻,通過構(gòu)造函數(shù)初始化
- 刪除對象時衣陶,通過析構(gòu)函數(shù)釋放資源
面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特點(diǎn):抽象、封裝闸氮、繼承剪况、多態(tài)
類定義的語法形式
class 類名稱
{
public:
公有成員(外部接口)
private:
私有成員
protected:
保護(hù)型成員
};
構(gòu)造函數(shù)的作用
- 在對象好被創(chuàng)建時使用特定的值構(gòu)造對象,將對象初始化為一個特定的初始狀態(tài)
構(gòu)造函數(shù)的調(diào)用時機(jī)
- 在對象創(chuàng)建時被自動調(diào)用
類內(nèi)初始值
private:
int hour = 0,minute = 0,second = 0;
私有類型成員
- 如果緊跟在類名稱的后面聲明私有成員蒲跨,則關(guān)鍵字private可以省略
類的成員函數(shù)
- 在類中聲明函數(shù)原型译断;
- 可以在類外給出函數(shù)體實(shí)現(xiàn),并在函數(shù)名前使用類名加以限定或悲;
- 也可以直接在類中給出函數(shù)體孙咪,形成內(nèi)聯(lián)成員函數(shù);
- 允許聲明重載函數(shù)和帶默認(rèn)參數(shù)值的函數(shù)
內(nèi)聯(lián)成員函數(shù)
- 內(nèi)聯(lián)函數(shù)體中不要有復(fù)雜結(jié)構(gòu)
(如循環(huán)語句和switch語句)巡语。 - 在類中聲明內(nèi)聯(lián)成員函數(shù)的方式:
- 將函數(shù)體放在類的聲明中
- 在類外實(shí)現(xiàn)函數(shù)的時候使用inline關(guān)鍵字
默認(rèn)構(gòu)造函數(shù)
- 調(diào)用時可以不需要實(shí)參的構(gòu)造函數(shù)
- 參數(shù)表為空的構(gòu)造函數(shù)
- 全部參數(shù)都有默認(rèn)值的構(gòu)造函數(shù)
下面兩個都是默認(rèn)構(gòu)造函數(shù)翎蹈,如在類中同時出現(xiàn),將產(chǎn)生編譯錯誤:
Clock();
Clock(int newH=0,int newM=0,int newS=0);
隱含生成的構(gòu)造函數(shù)
如果程序中未定義構(gòu)造函數(shù)捌臊,編譯器將自動生成一個默認(rèn)構(gòu)造函數(shù)
- 參數(shù)列表為空杨蛋,不為數(shù)據(jù)成員設(shè)置初始值;
- 如果類內(nèi)定義了成員的初始值,則使用內(nèi)類定義的初始值逞力;
- 如果沒有定義類內(nèi)的初始值曙寡,則以默認(rèn)方式初始化;
- 基本類型的數(shù)據(jù)默認(rèn)初始化的值是不確定的寇荧。
"=defalut"
- 如果程序中已定義構(gòu)造函數(shù)举庶,默認(rèn)情況下編譯器就不再隱含生成默認(rèn)構(gòu)造函數(shù)。如果此時依然希望編譯器隱含生成默認(rèn)構(gòu)造函數(shù)揩抡,可以使用“=default”户侥。
- 例:
class Clock{
public:
Clock() = default;//指示編譯器提供默認(rèn)構(gòu)造函數(shù)
Clock(int newH, int newM, int newS); //構(gòu)造函數(shù)
private:
int hour,minute,second;
}
數(shù)組:數(shù)組是一種數(shù)據(jù)形式,能夠存儲多個同類型的值峦嗤。
數(shù)組的初始化規(guī)則:只有定義數(shù)組時才能使用初始化蕊唐,此后就不能使用了,也不能將一個數(shù)組付給另一個數(shù)組:
int cards[4] = {3, 6, 8, 10}; //okay
int hand[4]; //okay
hand[4] = {5, 6, 7, 9}; //not allowed
hand = cards; //not allowed
然而烁设,可以用下標(biāo)分別給數(shù)組中的元素賦值替梨。
常量表達(dá)式是指值不會改變并且在編譯過程就能得到計(jì)算結(jié)果的表達(dá)式。顯然装黑,字面值屬于常量表達(dá)式副瀑,用常量表達(dá)式初始化的const對象也是常量表達(dá)式。
一個對象(或表達(dá)式)是不是常量表達(dá)式由它的數(shù)據(jù)類型和初始值共同決定
C++11新標(biāo)準(zhǔn)規(guī)定恋谭,允許將變量聲明為constexpr類型以便由編譯器來驗(yàn)證變量的值是否是一個常量表達(dá)式糠睡。聲明為constexpr的變量一定是一個常量,而且必須用常量表達(dá)式初始化