一、基本關(guān)鍵字(單詞)
1. 數(shù)據(jù)類型相關(guān)
int含義
用于聲明整數(shù)類型的變量。
示例
int?age;??// 聲明一個(gè)名為 age 的整數(shù)變量age?=?25;?// 給 age 變量賦值為 25
理解:int?就像是一個(gè)容器,專門用來存放整數(shù),在這個(gè)例子中,age?這個(gè)容器被用來存放代表年齡的整數(shù) 25。
float?和?double
含義
float?用于聲明單精度浮點(diǎn)數(shù)變量,double?用于聲明雙精度浮點(diǎn)數(shù)變量,浮點(diǎn)數(shù)可以表示小數(shù)。
示例
float?price?=?9.99f;??// 聲明一個(gè)單精度浮點(diǎn)數(shù)變量 price 并初始化為 9.99double?pi?=?3.1415926;?// 聲明一個(gè)雙精度浮點(diǎn)數(shù)變量 pi 并初始化為 3.1415926
理解:float?和?double?也是容器,但它們可以存放帶有小數(shù)的數(shù)字。float?的精度相對較低,而?double?的精度更高,能表示更精確的小數(shù)。
char
含義
用于聲明字符類型的變量。
示例char grade ='A';?// 聲明一個(gè)字符變量 grade 并初始化為字符 'A'
理解:char?容器只能存放一個(gè)字符,這里?grade?存放了代表成績等級的字符 'A'。
bool
含義
用于聲明布爾類型的變量,布爾類型只有兩個(gè)值:true?和?false。
示例
bool ?isStudent = true;// 聲明一個(gè)布爾變量 isStudent 并初始化為 true
理解
bool?變量就像一個(gè)開關(guān),只有開(true)和關(guān)(false)兩種狀態(tài),這里?isStudent?表示是否是學(xué)生,值為?true?表示是學(xué)生。
2. 控制結(jié)構(gòu)相關(guān)
if、else
含義
if?用于條件判斷,如果條件為真,則執(zhí)行?if?后面的代碼塊;else?用于?if?條件不成立時(shí)執(zhí)行的代碼塊。
示例
int?score?=?85;if(score?>=60){? ? std::cout?<<"及格了"<<?std::endl;}else{? ? std::cout?<<"不及格"<<?std::endl;}
理解:程序先判斷?score?是否大于等于 60,如果是,則輸出 “及格了”;如果不是,則執(zhí)行?else?后面的代碼,輸出 “不及格”。
for
含義
用于創(chuàng)建循環(huán),讓一段代碼重復(fù)執(zhí)行一定的次數(shù)。
示例
for?(int?i?=?0;?i?<?5;?i++)?{? ? std::cout?<<?i?<<?std::endl;}
理解
for?循環(huán)有三個(gè)部分,初始化部分?int i = 0?聲明并初始化一個(gè)循環(huán)變量?i;條件部分?i < 5?表示只要?i?小于 5,就會(huì)繼續(xù)執(zhí)行循環(huán)體;迭代部分?i++?表示每次循環(huán)結(jié)束后,i?的值加 1。所以這個(gè)循環(huán)會(huì)依次輸出 0 到 4。
while
含義
只要指定的條件為真,就會(huì)一直執(zhí)行循環(huán)體中的代碼。
示例
int?num?=?0;while?(num?<?3)?{? ? std::cout?<<?num?<<?std::endl;? ? num++;}
理解:程序先判斷?num?是否小于 3,如果是,則執(zhí)行循環(huán)體中的代碼,輸出?num?的值并將?num?加 1,然后再次判斷條件,直到條件不成立為止。
do-while
含義
與?while?循環(huán)類似,但?do-while?循環(huán)會(huì)先執(zhí)行一次循環(huán)體,然后再判斷條件。
示例
int?count?=?0;do?{? ? std::cout?<<?count?<<?std::endl;? ? count++;}?while?(count?<?2);
理解
無論條件是否成立,do?后面的代碼塊都會(huì)先執(zhí)行一次,然后再判斷?while?后面的條件,如果條件為真,則繼續(xù)循環(huán),否則結(jié)束循環(huán)。
3. 函數(shù)相關(guān)
void
含義
表示函數(shù)沒有返回值。
示例
void?printHello()?{? ? std::cout?<<?"Hello!"?<<?std::endl;}
理解:printHello?函數(shù)的作用是輸出 “Hello!”,它不需要返回任何值,所以返回類型為?void。
return
含義
用于從函數(shù)中返回一個(gè)值,并結(jié)束函數(shù)的執(zhí)行。
int?add(int?a,?int?b)?{? ??return?a?+?b;}
理解
add?函數(shù)接受兩個(gè)整數(shù)參數(shù)?a?和?b,將它們相加后通過?return?語句返回相加的結(jié)果。
二、常用語法句子
1. 變量聲明與初始化
int?number?=?10;?// 聲明一個(gè)整數(shù)變量 number 并初始化為 10
理解
這是一種常見的變量聲明和初始化方式,先指定變量的類型?int,然后給變量命名?number,最后用?=?給變量賦初始值 10。
2. 函數(shù)定義
int?multiply(int?x,?int?y)?{? ??return?x?*?y;}
理解
這是一個(gè)函數(shù)定義,int?表示函數(shù)的返回類型,multiply?是函數(shù)名,(int x, int y)?是函數(shù)的參數(shù)列表,包含兩個(gè)整數(shù)參數(shù)?x?和?y,函數(shù)體中使用?return?語句返回?x?和?y?的乘積。
3. 類定義
class?Rectangle?{private:? ??int?length;? ??int?width;public:? ??Rectangle(int?l,int?w){? ? ? ? length?=?l;? ? ? ? width?=?w;? ??}? ??intarea(){? ? ? ??return?length?*?width;? ??}};
理解
class?關(guān)鍵字用于定義一個(gè)類,這里定義了一個(gè)名為?Rectangle?的類。private?部分的成員變量?length?和?width?只能在類的內(nèi)部訪問;public?部分包含一個(gè)構(gòu)造函數(shù)?Rectangle(int l, int w)?用于初始化對象的成員變量,還有一個(gè)成員函數(shù)?area()?用于計(jì)算矩形的面積。
三、標(biāo)準(zhǔn)庫相關(guān)單詞和語法
1.?std?命名空間
含義
C++ 標(biāo)準(zhǔn)庫中的所有標(biāo)識符都定義在?std?命名空間中。
示例
#include?<iostream>int?main()?{? ? std::cout?<<?"Hello, World!"?<<?std::endl;? ??return?0;}
理解
std::cout?是標(biāo)準(zhǔn)輸出流對象,std::endl?用于換行,通過?std::?前綴來訪問?std?命名空間中的標(biāo)識符。
2. 包含頭文件
示例
#include?<vector>
理解
#include?是預(yù)處理指令,用于將指定的頭文件包含到當(dāng)前源文件中。#include <vector>?表示包含 C++ 標(biāo)準(zhǔn)庫中的?vector?頭文件,這樣就可以使用?std::vector?容器了。
四、內(nèi)存管理相關(guān)關(guān)鍵字和語法
1.?new?和?delete
關(guān)鍵字含義new
用于在堆上動(dòng)態(tài)分配內(nèi)存,并返回指向該內(nèi)存的指針。
delete
用于釋放?new?分配的內(nèi)存,防止內(nèi)存泄漏。
示例代碼
#include?<iostream>intmain(){? ??// 使用 new 動(dòng)態(tài)分配一個(gè)整數(shù)的內(nèi)存? ??int*?ptr?=newint;? ??*ptr?=10;? ? std::cout?<<"Value: "<<*ptr?<<?std::endl;? ??// 使用 delete 釋放內(nèi)存? ??delete?ptr;? ??return0;}
理解方式
在上述代碼中,new int?會(huì)在堆上分配一個(gè)足夠存儲(chǔ)整數(shù)的內(nèi)存塊,并返回該內(nèi)存塊的起始地址,這個(gè)地址被賦值給指針?ptr。通過?*ptr = 10?可以向該內(nèi)存塊寫入值。
當(dāng)不再需要這塊內(nèi)存時(shí),使用?delete ptr?釋放它。如果不釋放,這塊內(nèi)存將一直被占用,直到程序結(jié)束,造成內(nèi)存泄漏。
2.?new[]?和?delete[]
關(guān)鍵字含義new[]
用于在堆上動(dòng)態(tài)分配數(shù)組內(nèi)存。
delete[]
用于釋放?new[]?分配的數(shù)組內(nèi)存。
示例代碼
#include?<iostream>intmain(){? ??// 使用 new[] 動(dòng)態(tài)分配一個(gè)包含 5 個(gè)整數(shù)的數(shù)組? ??int*?arr?=newint[5];? ??for(int?i?=0;?i?<5;++i){? ? ? ? arr[i]=?i;? ??}? ??for(int?i?=0;?i?<5;++i){? ? ? ? std::cout?<<?arr[i]<<" ";? ??}? ? std::cout?<<?std::endl;? ??// 使用 delete[] 釋放數(shù)組內(nèi)存? ??delete[]?arr;? ??return0;}
理解方式
new int[5]
?會(huì)在堆上分配一塊足夠存儲(chǔ) 5 個(gè)整數(shù)的連續(xù)內(nèi)存塊,并返回該內(nèi)存塊的起始地址給指針?arr。
通過循環(huán)可以給數(shù)組元素賦值并輸出。使用?delete[] arr?來釋放整個(gè)數(shù)組的內(nèi)存,要注意必須使用?delete[]?而不是?delete,否則會(huì)導(dǎo)致未定義行為。
五、繼承與多態(tài)相關(guān)關(guān)鍵字和語法
1.?class?與繼承
關(guān)鍵字含義
在 C++ 中,class?不僅可以定義獨(dú)立的類,還能用于實(shí)現(xiàn)類之間的繼承關(guān)系。
示例代碼
#include?<iostream>// 基類classShape{public:? ??virtualvoiddraw(){? ? ? ? std::cout?<<"Drawing a shape."<<?std::endl;? ??}};// 派生類classCircle:public?Shape{public:? ??voiddraw()override{? ? ? ? std::cout?<<"Drawing a circle."<<?std::endl;? ??}};intmain(){? ? Shape*?shapePtr?=newCircle();? ? shapePtr->draw();? ??delete?shapePtr;? ??return0;}
理解方式
定義了一個(gè)基類?Shape?和一個(gè)派生類?Circle,Circle?通過?: public Shape?表示它繼承自?Shape?類。
Shape
?類中的?draw?函數(shù)被聲明為?virtual,表示這是一個(gè)虛函數(shù)。Circle?類中的?draw?函數(shù)使用?override?關(guān)鍵字,明確表示它重寫了基類的虛函數(shù)。
在?main?函數(shù)中,創(chuàng)建了一個(gè)?Circle?對象,并使用基類指針?shapePtr?指向它,調(diào)用?draw?函數(shù)時(shí),會(huì)根據(jù)對象的實(shí)際類型(Circle)調(diào)用相應(yīng)的函數(shù),這就是多態(tài)的體現(xiàn)。
2.?virtual?和?override
關(guān)鍵字含義virtual
用于聲明虛函數(shù),使得在通過基類指針或引用調(diào)用該函數(shù)時(shí),能夠根據(jù)對象的實(shí)際類型來決定調(diào)用哪個(gè)版本的函數(shù)。
override
用于派生類中重寫基類的虛函數(shù),編譯器會(huì)檢查是否真的重寫了基類的虛函數(shù),如果沒有則會(huì)報(bào)錯(cuò)。
示例代碼可參考上述繼承示例
理解方式virtual
?關(guān)鍵字為多態(tài)機(jī)制奠定了基礎(chǔ),它允許在運(yùn)行時(shí)根據(jù)對象的實(shí)際類型來選擇合適的函數(shù)實(shí)現(xiàn)。
override
?關(guān)鍵字提高了代碼的可讀性和安全性,確保派生類正確地重寫了基類的虛函數(shù),避免因函數(shù)名拼寫錯(cuò)誤等問題導(dǎo)致的意外行為。
六、模板相關(guān)關(guān)鍵字和語法
1.?template
關(guān)鍵字含義template
?用于定義模板,模板是 C++ 實(shí)現(xiàn)泛型編程的重要工具,它可以讓我們編寫與類型無關(guān)的代碼。
示例代碼(函數(shù)模板)
#include?<iostream>template<typenameT>T?max(T a,?T b){? ??return(a?>?b)??a?:?b;}intmain(){? ??int?intMax?=max(10,20);? ??double?doubleMax?=max(3.14,2.71);? ? std::cout?<<"Max int: "<<?intMax?<<?std::endl;? ? std::cout?<<"Max double: "<<?doubleMax?<<?std::endl;? ??return0;}
理解方式template <typename T>
?聲明了一個(gè)模板參數(shù)?T,T?可以代表任意類型。在?max?函數(shù)中,使用?T?作為參數(shù)類型和返回類型,這樣函數(shù)就可以處理不同類型的數(shù)據(jù)。
在?main?函數(shù)中,分別調(diào)用?max?函數(shù)處理整數(shù)和雙精度浮點(diǎn)數(shù),編譯器會(huì)根據(jù)實(shí)際傳入的參數(shù)類型自動(dòng)實(shí)例化出相應(yīng)的函數(shù)版本。
2. 類模板
示例代碼
#include?<iostream>template<typenameT>classContainer{private:? ? T value;public:? ??Container(T val):value(val){}? ? T?getValue(){? ? ? ??return?value;? ??}};intmain(){? ? Container<int>intContainer(100);? ? Container<double>doubleContainer(3.14);? ? std::cout?<<"Int value: "<<?intContainer.getValue()<<?std::endl;? ? std::cout?<<"Double value: "<<?doubleContainer.getValue()<<?std::endl;? ??return0;}
理解方式
定義了一個(gè)類模板?Container,它有一個(gè)模板參數(shù)?T,類中使用?T?作為成員變量和函數(shù)返回值的類型。
在?main?函數(shù)中,通過?Container<int>?和?Container<double>?分別實(shí)例化出處理整數(shù)和雙精度浮點(diǎn)數(shù)的類對象,這樣就可以用同一個(gè)類模板處理不同類型的數(shù)據(jù)。
七、異常處理相關(guān)關(guān)鍵字和語法
1.?try、catch?和?throw
關(guān)鍵字含義
try用于包裹可能會(huì)拋出異常的代碼塊。
catch用于捕獲并處理?try塊中拋出的異常。
throw用于拋出異常。
示例代碼
#include?<iostream>doubledivide(double?a,double?b){? ??if(b?==0){? ? ? ??throw"Division by zero!";? ??}? ??return?a?/?b;}intmain(){? ??try{? ? ? ??double?result?=divide(10,0);? ? ? ? std::cout?<<"Result: "<<?result?<<?std::endl;? ??}catch(constchar*?msg){? ? ? ? std::cerr?<<"Error: "<<?msg?<<?std::endl;? ??}? ??return0;}
理解方式
在?divide?函數(shù)中,如果除數(shù)?b?為 0,則使用?throw?拋出一個(gè)字符串異常。
在?main?函數(shù)中,try?塊中調(diào)用?divide?函數(shù),當(dāng)拋出異常時(shí),程序會(huì)跳轉(zhuǎn)到相應(yīng)的?catch?塊中,這里捕獲的是?const char*?類型的異常,并輸出錯(cuò)誤信息。