【軟件開發(fā)】編程語言C++(上篇)
-Start:關(guān)注本公眾號(hào)后,可直接聯(lián)系后臺(tái)獲取排版美化的詳細(xì)文檔!
Hints:本篇文章所編纂的資料均來自網(wǎng)絡(luò),特此感謝參與奉獻(xiàn)的有關(guān)人員。
C++的基本概念:
C++ 是一種靜態(tài)類型的、編譯式的、通用的、大小寫敏感的、不規(guī)則的編程語言,支持過程化編程、面向?qū)ο缶幊毯头盒途幊獭?/span>
?
C++的語言特性:
-面向?qū)ο箝_發(fā)的四大特性:
1 封裝
2 抽象
3 繼承
4 多態(tài)
?
C++的關(guān)鍵字集:
asm | else | new | this |
auto | enum | operator | throw |
bool | explicit | private | true |
break | export | protected | try |
case | extern | public | typedef |
catch | false | register | typeid |
char | float | reinterpret_cast | typename |
class | for | return | union |
const | friend | short | unsigned |
const_cast | goto | signed | using |
continue | if | sizeof | virtual |
default | inline | static | void |
delete | int | static_cast | volatile |
do | long | struct | wchar_t |
double | mutable | switch | while |
dynamic_cast | namespace | template |
-typdef
可以使用?typedef?為一個(gè)已有的類型取一個(gè)新的名字。
typedef type newname;
-enum
枚舉類型(enumeration)是C++中的一種派生數(shù)據(jù)類型,它是由用戶定義的若干枚舉常量的集合。如果一個(gè)變量只有幾種可能的值,可以定義為枚舉(enumeration)類型。所謂"枚舉"是指將變量的值一一列舉出來,變量的值只能在列舉出來的值的范圍內(nèi)。
-定義常量
在 C++ 中,有兩種簡(jiǎn)單的定義常量的方式:
使用?#define?預(yù)處理器。
使用?const?關(guān)鍵字。
使用 #define 預(yù)處理器定義常量
#define identifier value
?
C++的內(nèi)置類型:
-類型字符
類型 | 關(guān)鍵字 |
布爾型 | bool |
字符型 | char |
整型 | int |
浮點(diǎn)型 | float |
雙浮點(diǎn)型 | double |
無類型 | void |
寬字符型 | wchar_t |
-類型修飾符:
一些基本類型可以使用一個(gè)或多個(gè)類型修飾符進(jìn)行修飾:
-signed
-unsigned
-short
-long
-類型大小:
型 | 位 | 范圍 |
char | 1 個(gè)字節(jié) | -128 到 127 或者 0 到 255 |
unsigned char | 1 個(gè)字節(jié) | 0 到 255 |
signed char | 1 個(gè)字節(jié) | -128 到 127 |
int | 4 個(gè)字節(jié) | -2147483648 到 2147483647 |
unsigned int | 4 個(gè)字節(jié) | 0 到 4294967295 |
signed int | 4 個(gè)字節(jié) | -2147483648 到 2147483647 |
short int | 2 個(gè)字節(jié) | -32768 到 32767 |
unsigned short int | 2 個(gè)字節(jié) | 0 到 65,535 |
signed short int | 2 個(gè)字節(jié) | -32768 到 32767 |
long int | 8 個(gè)字節(jié) | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
signed long int | 8 個(gè)字節(jié) | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long int | 8 個(gè)字節(jié) | 0 到 18,446,744,073,709,551,615 |
float | 4 個(gè)字節(jié) | 精度型占4個(gè)字節(jié)(32位)內(nèi)存空間,+/- 3.4e +/- 38 (~7 個(gè)數(shù)字) |
double | 8 個(gè)字節(jié) | 雙精度型占8 個(gè)字節(jié)(64位)內(nèi)存空間,+/- 1.7e +/- 308 (~15 個(gè)數(shù)字) |
long double | 16 個(gè)字節(jié) | 長(zhǎng)雙精度型 16 個(gè)字節(jié)(128位)內(nèi)存空間,可提供18-19位有效數(shù)字。 |
wchar_t | 2 或 4 個(gè)字節(jié) | 1 個(gè)寬字符 |
-類型限定符
限定符 | 含義 |
const | const?類型的對(duì)象在程序執(zhí)行期間不能被修改改變。 |
volatile | 修飾符?volatile?告訴編譯器不需要優(yōu)化volatile聲明的變量,讓程序可以直接從內(nèi)存中讀取變量。對(duì)于一般的變量編譯器會(huì)對(duì)變量進(jìn)行優(yōu)化,將內(nèi)存中的變量值放在寄存器中以加快讀寫效率。 |
restrict | 由?restrict?修飾的指針是唯一一種訪問它所指向的對(duì)象的方式。只有?C99?增加了新的類型限定符?restrict。 |
C++的數(shù)據(jù)結(jié)構(gòu)
-數(shù)組結(jié)構(gòu)
C++ 支持?jǐn)?shù)組數(shù)據(jù)結(jié)構(gòu),它可以存儲(chǔ)一個(gè)固定大小的相同類型元素的順序集合。數(shù)組是用來存儲(chǔ)一系列數(shù)據(jù),但它往往被認(rèn)為是一系列相同類型的變量。
概念 | 描述 |
多維數(shù)組 | C++ 支持多維數(shù)組。多維數(shù)組最簡(jiǎn)單的形式是二維數(shù)組。 |
指向數(shù)組的指針 | 您可以通過指定不帶索引的數(shù)組名稱來生成一個(gè)指向數(shù)組中第一個(gè)元素的指針。 |
傳遞數(shù)組給函數(shù) | 您可以通過指定不帶索引的數(shù)組名稱來給函數(shù)傳遞一個(gè)指向數(shù)組的指針。 |
從函數(shù)返回?cái)?shù)組 | C++ 允許從函數(shù)返回?cái)?shù)組。 |
-字符串
C++ 提供了以下兩種類型的字符串表示形式:
-C 風(fēng)格字符串
-C++ 引入的 string 類類型
序號(hào) | 函數(shù) & 目的 |
1 | strcpy(s1, s2); |
2 | strcat(s1, s2); string str1 = "runoob"; string str2 = "google"; string str = str1 + str2; |
3 | strlen(s1); |
4 | strcmp(s1, s2); |
5 | strchr(s1, ch); |
6 | strstr(s1, s2); |
-指針
指針是一個(gè)變量,其值為另一個(gè)變量的地址,即,內(nèi)存位置的直接地址。就像其他變量或常量一樣,您必須在使用指針存儲(chǔ)其他變量地址之前,對(duì)其進(jìn)行聲明。指針變量聲明的一般形式為:
type *var-name;
每一個(gè)變量都有一個(gè)內(nèi)存位置,每一個(gè)內(nèi)存位置都定義了可使用連字號(hào)(&)運(yùn)算符訪問的地址,它表示了在內(nèi)存中的一個(gè)地址。
C++ ?Null 指針 | C++ 支持空指針。NULL 指針是一個(gè)定義在標(biāo)準(zhǔn)庫(kù)中的值為零的常量。 |
C++ 指針的算術(shù)運(yùn)算 | 可以對(duì)指針進(jìn)行四種算術(shù)運(yùn)算:++、--、+、- |
C++ 指針 vs 數(shù)組 | 指針和數(shù)組之間有著密切的關(guān)系。 |
C++ 指針數(shù)組 | 可以定義用來存儲(chǔ)指針的數(shù)組。 |
C++ 指向指針的指針 | C++ 允許指向指針的指針。 |
C++ 傳遞指針給函數(shù) | 通過引用或地址傳遞參數(shù),使傳遞的參數(shù)在調(diào)用函數(shù)中被改變。 |
C++ 從函數(shù)返回指針 | C++ 允許函數(shù)返回指針到局部變量、靜態(tài)變量和動(dòng)態(tài)內(nèi)存分配。 |
-引用
C++?引用
引用變量是一個(gè)別名,也就是說,它是某個(gè)已存在變量的另一個(gè)名字。一旦把引用初始化為某個(gè)變量,就可以使用該引用名稱或變量名稱來指向變量。
C++ 引用 vs 指針
引用很容易與指針混淆,它們之間有三個(gè)主要的不同:
-不存在空引用。引用必須連接到一塊合法的內(nèi)存。
-一旦引用被初始化為一個(gè)對(duì)象,就不能被指向到另一個(gè)對(duì)象。指針可以在任何時(shí)候指向到另一個(gè)對(duì)象。
-引用必須在創(chuàng)建時(shí)被初始化。指針可以在任何時(shí)間被初始化。
-日期 & 時(shí)間
C++ 標(biāo)準(zhǔn)庫(kù)沒有提供所謂的日期類型。C++ 繼承了 C 語言用于日期和時(shí)間操作的結(jié)構(gòu)和函數(shù)。為了使用日期和時(shí)間相關(guān)的函數(shù)和結(jié)構(gòu),需要在 C++ 程序中引用 <ctime> 頭文件。
序號(hào) | 函數(shù) & 描述 |
1 | time_t time(time_t ?*time); |
2 | char *ctime(const ?time_t *time); |
3 | struct tm ?*localtime(const time_t *time); |
4 | clock_t ?clock(void); |
5 | char * asctime ( ?const struct tm * time ); |
6 | struct tm ?*gmtime(const time_t *time); |
7 | time_t mktime(struct ?tm *time); |
8 | double difftime ( ?time_t time2, time_t time1 ); |
9 | size_t strftime(); |
-模板
模板是創(chuàng)建泛型類或函數(shù)的藍(lán)圖或公式。庫(kù)容器,比如迭代器和算法,都是泛型編程的例子,它們都使用了模板的概念。
每個(gè)容器都有一個(gè)單一的定義,比如?向量,我們可以定義許多不同類型的向量,比如?vector <int>?或?vector <string>。
C++的運(yùn)算符
-算術(shù)運(yùn)算符
算符 | 描述 | 實(shí)例 |
+ | 把兩個(gè)操作數(shù)相加 | A + B 將得到 30 |
- | 從第一個(gè)操作數(shù)中減去第二個(gè)操作數(shù) | A - B 將得到 -10 |
* | 把兩個(gè)操作數(shù)相乘 | A * B 將得到 200 |
/ | 分子除以分母 | B / A 將得到 2 |
% | 取模運(yùn)算符,整除后的余數(shù) | B % A 將得到 0 |
++ | 自增運(yùn)算符,整數(shù)值增加 1 | A++ 將得到 11 |
-- | 自減運(yùn)算符,整數(shù)值減少 1 | A-- 將得到 9 |
-關(guān)系運(yùn)算符
運(yùn)算符 | 描述 | 實(shí)例 |
== | 檢查兩個(gè)操作數(shù)的值是否相等,如果相等則條件為真。 | (A == B) 不為真。 |
!= | 檢查兩個(gè)操作數(shù)的值是否相等,如果不相等則條件為真。 | (A != B) 為真。 |
>? | 檢查左操作數(shù)的值是否大于右操作數(shù)的值,如果是則條件為真。 | (A > B) 不為真。 |
<? | 檢查左操作數(shù)的值是否小于右操作數(shù)的值,如果是則條件為真。 | (A < B) 為真。 |
>= | 檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值,如果是則條件為真。 | (A >= B) 不為真。 |
<= | 檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值,如果是則條件為真。 | (A <= B) 為真。 |
-邏輯運(yùn)算符
運(yùn)算符 | 描述 | 實(shí)例 |
&& | 稱為邏輯與運(yùn)算符。如果兩個(gè)操作數(shù)都 ?true,則條件為 true。 | (A && B) 為 false。 |
|| | 稱為邏輯或運(yùn)算符。如果兩個(gè)操作數(shù)中有任意一個(gè) true,則條件為 true。 | (A || B) 為 true。 |
! | 稱為邏輯非運(yùn)算符。用來逆轉(zhuǎn)操作數(shù)的邏輯狀態(tài),如果條件為 true 則邏輯非運(yùn)算符將使其為 false。 | !(A && B) 為 true。 |
-位運(yùn)算符
運(yùn)算符 | 描述 | 實(shí)例 |
& | 按位與操作,按二進(jìn)制位進(jìn)行"與"運(yùn)算。運(yùn)算規(guī)則: 0&0=0;?? ? 0&1=0;??? ? 1&0=0;???? ? 1&1=1; | (A & B) 將得到 12,即為 0000 1100 |
| | 按位或運(yùn)算符,按二進(jìn)制位進(jìn)行"或"運(yùn)算。運(yùn)算規(guī)則: 0|0=0;?? ? 0|1=1;?? ? 1|0=1;??? ? 1|1=1; | (A | B) 將得到 61,即為 ?0011 1101 |
^ | 異或運(yùn)算符,按二進(jìn)制位進(jìn)行"異或"運(yùn)算。運(yùn)算規(guī)則: 0^0=0;?? ? 0^1=1;?? ? 1^0=1;? ? 1^1=0; | (A ^ B) 將得到 49,即為 ?0011 0001 |
~ | 取反運(yùn)算符,按二進(jìn)制位進(jìn)行"取反"運(yùn)算。運(yùn)算規(guī)則: ~1=-2;?? ? ~0=1; | (~A ) 將得到 -61,即為 ?1100 0011,一個(gè)有符號(hào)二進(jìn)制數(shù)的補(bǔ)碼形式。 |
<<? | 二進(jìn)制左移運(yùn)算符。將一個(gè)運(yùn)算對(duì)象的各二進(jìn)制位全部左移若干位(左邊的二進(jìn)制位丟棄,右邊補(bǔ)0)。 | A << 2 將得到 240,即為 1111 0000 |
>>? | 二進(jìn)制右移運(yùn)算符。將一個(gè)數(shù)的各二進(jìn)制位全部右移若干位,正數(shù)左補(bǔ)0,負(fù)數(shù)左補(bǔ)1,右邊丟棄。 | A >> 2 將得到 15,即為 0000 1111 |
-賦值運(yùn)算符
運(yùn)算符 | 描述 | 實(shí)例 |
= | 簡(jiǎn)單的賦值運(yùn)算符,把右邊操作數(shù)的值賦給左邊操作數(shù) | C = A + B 將把 A + B 的值賦給 C |
+= | 加且賦值運(yùn)算符,把右邊操作數(shù)加上左邊操作數(shù)的結(jié)果賦值給左邊操作數(shù) | C += A 相當(dāng)于 C = C + A |
-= | 減且賦值運(yùn)算符,把左邊操作數(shù)減去右邊操作數(shù)的結(jié)果賦值給左邊操作數(shù) | C -= A 相當(dāng)于 C = C - A |
*= | 乘且賦值運(yùn)算符,把右邊操作數(shù)乘以左邊操作數(shù)的結(jié)果賦值給左邊操作數(shù) | C *= A 相當(dāng)于 C = C * A |
/= | 除且賦值運(yùn)算符,把左邊操作數(shù)除以右邊操作數(shù)的結(jié)果賦值給左邊操作數(shù) | C /= A 相當(dāng)于 C = C / A |
%= | 求模且賦值運(yùn)算符,求兩個(gè)操作數(shù)的模賦值給左邊操作數(shù) | C %= A 相當(dāng)于 C = C % A |
<<= | 左移且賦值運(yùn)算符 | C <<= 2 等同于 C = C << 2 |
>>= | 右移且賦值運(yùn)算符 | C >>= 2 等同于 C = C >> 2 |
&= | 按位與且賦值運(yùn)算符 | C &= 2 等同于 C = C & 2 |
^= | 按位異或且賦值運(yùn)算符 | C ^= 2 等同于 C = C ^ 2 |
|= | 按位或且賦值運(yùn)算符 | C |= 2 等同于 C = C | 2 |
-雜項(xiàng)運(yùn)算符
運(yùn)算符 | 描述 |
sizeof | sizeof 運(yùn)算符返回變量的大小。例如,sizeof(a) 將返回 4,其中 a 是整數(shù)。 |
Condition ? X : Y | 條件運(yùn)算符。如果 Condition 為真 ? 則值為 X : 否則值為 Y。 |
, | 逗號(hào)運(yùn)算符會(huì)順序執(zhí)行一系列運(yùn)算。整個(gè)逗號(hào)表達(dá)式的值是以逗號(hào)分隔的列表中的最后一個(gè)表達(dá)式的值。 |
.(點(diǎn))和 ->(箭頭) | 成員運(yùn)算符用于引用類、結(jié)構(gòu)和共用體的成員。 |
Cast | 強(qiáng)制轉(zhuǎn)換運(yùn)算符把一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型。例如,int(2.2000) 將返回 2。 |
& | 指針運(yùn)算符 &?返回變量的地址。例如 &a; 將給出變量的實(shí)際地址。 |
* | 指針運(yùn)算符 *?指向一個(gè)變量。例如,*var; 將指向變量 var。 |
?
C++的邏輯語句:
-循環(huán)語句
循環(huán)語句允許我們多次執(zhí)行一個(gè)語句或語句組

循環(huán)類型 | 描述 |
while ?循環(huán) | 當(dāng)給定條件為真時(shí),重復(fù)語句或語句組。它會(huì)在執(zhí)行循環(huán)主體之前測(cè)試條件。 |
for 循環(huán) | 多次執(zhí)行一個(gè)語句序列,簡(jiǎn)化管理循環(huán)變量的代碼。 |
do...while ?循環(huán) | 除了它是在循環(huán)主體結(jié)尾測(cè)試條件外,其他與 while 語句類似。 |
嵌套循環(huán) | 您可以在 while、for 或 do..while 循環(huán)內(nèi)使用一個(gè)或多個(gè)循環(huán) |
循環(huán)控制語句
控制語句 | 描述 |
break ?語句 | 終止?loop?或?switch?語句,程序流將繼續(xù)執(zhí)行緊接著 loop 或 switch 的下一條語句。 |
continue ?語句 | 引起循環(huán)跳過主體的剩余部分,立即重新開始測(cè)試條件。 |
goto ?語句 | 將控制轉(zhuǎn)移到被標(biāo)記的語句。但是不建議在程序中使用 goto 語句。 |
-判斷語句
判斷結(jié)構(gòu)要求程序員指定一個(gè)或多個(gè)要評(píng)估或測(cè)試的條件,以及條件為真時(shí)要執(zhí)行的語句(必需的)和條件為假時(shí)要執(zhí)行的語句(可選的)。

語句 | 描述 |
if 語句 | 一個(gè)?if 語句?由一個(gè)布爾表達(dá)式后跟一個(gè)或多個(gè)語句組成。 |
if...else ?語句 | 一個(gè)?if 語句?后可跟一個(gè)可選的?else 語句,else ?語句在布爾表達(dá)式為假時(shí)執(zhí)行。 |
嵌套 if 語句 | 您可以在一個(gè)?if?或?else if?語句內(nèi)使用另一個(gè)?if?或?else if?語句。 |
switch ?語句 | 一個(gè)?switch?語句允許測(cè)試一個(gè)變量等于多個(gè)值時(shí)的情況。 |
嵌套 switch 語句 | 您可以在一個(gè)?switch?語句內(nèi)使用另一個(gè)?switch?語句。 |
--函數(shù)
函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語句。每個(gè) C++ 程序都至少有一個(gè)函數(shù),即主函數(shù)?main()?,所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù)。函數(shù)聲明告訴編譯器函數(shù)的名稱、返回類型和參數(shù)。函數(shù)定義提供了函數(shù)的實(shí)際主體。C++ 標(biāo)準(zhǔn)庫(kù)提供了大量的程序可以調(diào)用的內(nèi)置函數(shù)。例如,函數(shù)?strcat()?用來連接兩個(gè)字符串,函數(shù)?memcpy()?用來復(fù)制內(nèi)存到另一個(gè)位置。
-返回類型:一個(gè)函數(shù)可以返回一個(gè)值。return_type?是函數(shù)返回的值的數(shù)據(jù)類型。有些函數(shù)執(zhí)行所需的操作而不返回值,在這種情況下,return_type 是關(guān)鍵字?void。
-函數(shù)名稱:這是函數(shù)的實(shí)際名稱。函數(shù)名和參數(shù)列表一起構(gòu)成了函數(shù)簽名。
-參數(shù):參數(shù)就像是占位符。當(dāng)函數(shù)被調(diào)用時(shí),您向參數(shù)傳遞一個(gè)值,這個(gè)值被稱為實(shí)際參數(shù)。參數(shù)列表包括函數(shù)參數(shù)的類型、順序、數(shù)量。參數(shù)是可選的,也就是說,函數(shù)可能不包含參數(shù)。
-函數(shù)主體:函數(shù)主體包含一組定義函數(shù)執(zhí)行任務(wù)的語句。
函數(shù)參數(shù)
調(diào)用類型 | 描述 |
傳值調(diào)用 | 該方法把參數(shù)的實(shí)際值賦值給函數(shù)的形式參數(shù)。在這種情況下,修改函數(shù)內(nèi)的形式參數(shù)對(duì)實(shí)際參數(shù)沒有影響。 |
指針調(diào)用 | 該方法把參數(shù)的地址賦值給形式參數(shù)。在函數(shù)內(nèi),該地址用于訪問調(diào)用中要用到的實(shí)際參數(shù)。這意味著,修改形式參數(shù)會(huì)影響實(shí)際參數(shù)。 |
引用調(diào)用 | 該方法把參數(shù)的引用賦值給形式參數(shù)。在函數(shù)內(nèi),該引用用于訪問調(diào)用中要用到的實(shí)際參數(shù)。這意味著,修改形式參數(shù)會(huì)影響實(shí)際參數(shù)。 |
默認(rèn)情況下,C++ 使用傳值調(diào)用來傳遞參數(shù)。一般來說,這意味著函數(shù)內(nèi)的代碼不能改變用于調(diào)用函數(shù)的參數(shù)。之前提到的實(shí)例,調(diào)用 max() 函數(shù)時(shí),使用了相同的方法。
Lambda 函數(shù)與表達(dá)式
Lambda 表達(dá)式把函數(shù)看作對(duì)象。Lambda 表達(dá)式可以像對(duì)象一樣使用,比如可以將它們賦給變量和作為參數(shù)傳遞,還可以像函數(shù)一樣對(duì)其求值。
Lambda 表達(dá)式本質(zhì)上與函數(shù)聲明非常類似。Lambda 表達(dá)式具體形式如下:[capture](parameters)->return-type{body}
內(nèi)置函數(shù)
引用數(shù)學(xué)頭文件?<cmath>
序號(hào) | 函數(shù) & 描述 |
1 | double cos(double); |
2 | double sin(double); |
3 | double tan(double); |
4 | double log(double); |
5 | double pow(double, double); |
6 | double hypot(double, double); |
7 | double sqrt(double); |
8 | int abs(int); |
9 | double fabs(double); |
10 | double floor(double); |
?
C++ 的類與對(duì)象
-C++ 類定義
定義一個(gè)類,本質(zhì)上是定義一個(gè)數(shù)據(jù)類型的藍(lán)圖。這實(shí)際上并沒有定義任何數(shù)據(jù),但它定義了類的名稱意味著什么,也就是說,它定義了類的對(duì)象包括了什么,以及可以在這個(gè)對(duì)象上執(zhí)行哪些操作。

-定義 C++ 對(duì)象
類提供了對(duì)象的藍(lán)圖,所以基本上,對(duì)象是根據(jù)類來創(chuàng)建的。聲明類的對(duì)象,就像聲明基本類型的變量一樣。
類 & 對(duì)象詳解
到目前為止,我們已經(jīng)對(duì) C++ 的類和對(duì)象有了基本的了解。下面的列表中還列出了其他一些 C++ 類和對(duì)象相關(guān)的概念,可以點(diǎn)擊相應(yīng)的鏈接進(jìn)行學(xué)習(xí)。
概念 | 描述 |
類成員函數(shù) | 類的成員函數(shù)是指那些把定義和原型寫在類定義內(nèi)部的函數(shù),就像類定義中的其他變量一樣。 |
類訪問修飾符 | 類成員可以被定義為 public、private 或 protected。默認(rèn)情況下是定義為 private。 |
構(gòu)造函數(shù) & 析構(gòu)函數(shù) | 類的構(gòu)造函數(shù)是一種特殊的函數(shù),在創(chuàng)建一個(gè)新的對(duì)象時(shí)調(diào)用。類的析構(gòu)函數(shù)也是一種特殊的函數(shù),在刪除所創(chuàng)建的對(duì)象時(shí)調(diào)用。 |
C++ 拷貝構(gòu)造函數(shù) | 拷貝構(gòu)造函數(shù),是一種特殊的構(gòu)造函數(shù),它在創(chuàng)建對(duì)象時(shí),是使用同一類中之前創(chuàng)建的對(duì)象來初始化新創(chuàng)建的對(duì)象。 |
C++ 友元函數(shù) | 友元函數(shù)可以訪問類的 private 和 protected 成員。 |
C++ 內(nèi)聯(lián)函數(shù) | 通過內(nèi)聯(lián)函數(shù),編譯器試圖在調(diào)用函數(shù)的地方擴(kuò)展函數(shù)體中的代碼。 |
C++ 中的 this 指針 | 每個(gè)對(duì)象都有一個(gè)特殊的指針?this,它指向?qū)ο蟊旧怼?/span> |
C++ 中指向類的指針 | 指向類的指針方式如同指向結(jié)構(gòu)的指針。實(shí)際上,類可以看成是一個(gè)帶有函數(shù)的結(jié)構(gòu)。 |
C++ 類的靜態(tài)成員 | 類的數(shù)據(jù)成員和函數(shù)成員都可以被聲明為靜態(tài)的。 |
-對(duì)象繼承
面向?qū)ο蟪绦蛟O(shè)計(jì)中最重要的一個(gè)概念是繼承。繼承允許我們依據(jù)另一個(gè)類來定義一個(gè)類,這使得創(chuàng)建和維護(hù)一個(gè)應(yīng)用程序變得更容易。這樣做,也達(dá)到了重用代碼功能和提高執(zhí)行效率的效果。

當(dāng)創(chuàng)建一個(gè)類時(shí),您不需要重新編寫新的數(shù)據(jù)成員和成員函數(shù),只需指定新建的類繼承了一個(gè)已有的類的成員即可。這個(gè)已有的類稱為基類,新建的類稱為派生類。
繼承代表了?isa?關(guān)系。例如,哺乳動(dòng)物是動(dòng)物,狗是哺乳動(dòng)物,因此,狗是動(dòng)物,等等。
訪問修飾符access-specifier 是?public、protected?或?private?其中的一個(gè),base-class 是之前定義過的某個(gè)類的名稱。如果未使用訪問修飾符 access-specifier,則默認(rèn)為 private。
訪問控制和繼承
派生類可以訪問基類中所有的非私有成員。因此基類成員如果不想被派生類的成員函數(shù)訪問,則應(yīng)在基類中聲明為 private。
我們可以根據(jù)訪問權(quán)限總結(jié)出不同的訪問類型,如下所示:
訪問 | public | protected | private |
同一個(gè)類 | yes | yes | yes |
派生類 | yes | yes | no |
外部的類 | yes | no | no |
?-C++?接口(抽象類)
接口描述了類的行為和功能,而不需要完成類的特定實(shí)現(xiàn)。
C++?接口是使用抽象類來實(shí)現(xiàn)的,抽象類與數(shù)據(jù)抽象互不混淆,數(shù)據(jù)抽象是一個(gè)把實(shí)現(xiàn)細(xì)節(jié)與相關(guān)的數(shù)據(jù)分離開的概念。如果類中至少有一個(gè)函數(shù)被聲明為純虛函數(shù),則這個(gè)類就是抽象類。純虛函數(shù)是通過在聲明中使用?"= 0"?來指定的設(shè)計(jì)抽象類(通常稱為?ABC)的目的,是為了給其他類提供一個(gè)可以繼承的適當(dāng)?shù)幕悺3橄箢惒荒鼙挥糜趯?shí)例化對(duì)象,它只能作為接口使用。如果試圖實(shí)例化一個(gè)抽象類的對(duì)象,會(huì)導(dǎo)致編譯錯(cuò)誤。
C++的重要概念
-重載運(yùn)算符和重載函數(shù)
C++ 允許在同一作用域中的某個(gè)函數(shù)和運(yùn)算符指定多個(gè)定義,分別稱為函數(shù)重載和運(yùn)算符重載。
重載聲明是指一個(gè)與之前已經(jīng)在該作用域內(nèi)聲明過的函數(shù)或方法具有相同名稱的聲明,但是它們的參數(shù)列表和定義(實(shí)現(xiàn))不相同。
當(dāng)您調(diào)用一個(gè)重載函數(shù)或重載運(yùn)算符時(shí),編譯器通過把您所使用的參數(shù)類型與定義中的參數(shù)類型進(jìn)行比較,決定選用最合適的定義。選擇最合適的重載函數(shù)或重載運(yùn)算符的過程,稱為重載決策。
C++ 中的函數(shù)重載
在同一個(gè)作用域內(nèi),可以聲明幾個(gè)功能類似的同名函數(shù),但是這些同名函數(shù)的形式參數(shù)(指參數(shù)的個(gè)數(shù)、類型或者順序)必須不同。您不能僅通過返回類型的不同來重載函數(shù)。
C++ 中的運(yùn)算符重載
您可以重定義或重載大部分 C++ 內(nèi)置的運(yùn)算符。這樣,您就能使用自定義類型的運(yùn)算符。
重載的運(yùn)算符是帶有特殊名稱的函數(shù),函數(shù)名是由關(guān)鍵字 operator 和其后要重載的運(yùn)算符符號(hào)構(gòu)成的。與其他函數(shù)一樣,重載運(yùn)算符有一個(gè)返回類型和一個(gè)參數(shù)列表。
可重載運(yùn)算符/不可重載運(yùn)算符
下面是可重載的運(yùn)算符列表:
雙目算術(shù)運(yùn)算符 | + (加),-(減),*(乘),/(除),%?(取模) |
關(guān)系運(yùn)算符 | ==(等于),!= ?(不等于),< (小于),> ?(大于),<=(小于等于),>=(大于等于) |
邏輯運(yùn)算符 | ||(邏輯或),&&(邏輯與),!(邏輯非) |
單目運(yùn)算符 | + (正),-(負(fù)),*(指針),&(取地址) |
自增自減運(yùn)算符 | ++(自增),--(自減) |
位運(yùn)算符 | | (按位或),& ?(按位與),~(按位取反),^(按位異或),,<<?(左移),>>(右移) |
賦值運(yùn)算符 | =, +=, -=, *=, /= , % = , &=, |=, ^=, ?<<=, >>= |
空間申請(qǐng)與釋放 | new, delete, new[ ] , delete[] |
其他運(yùn)算符 | ()(函數(shù)調(diào)用),->(成員訪問),,(逗號(hào)),[](下標(biāo)) |
下面是不可重載的運(yùn)算符列表:
.:成員訪問運(yùn)算符
.*,?->*:成員指針訪問運(yùn)算符
:::域運(yùn)算符
sizeof:長(zhǎng)度運(yùn)算符
?::條件運(yùn)算符
#:預(yù)處理符號(hào)
?-多態(tài)
多態(tài)按字面的意思就是多種形態(tài)。當(dāng)類之間存在層次結(jié)構(gòu),并且類之間是通過繼承關(guān)聯(lián)時(shí),就會(huì)用到多態(tài)。C++ 多態(tài)意味著調(diào)用成員函數(shù)時(shí),會(huì)根據(jù)調(diào)用函數(shù)的對(duì)象的類型來執(zhí)行不同的函數(shù)。
靜態(tài)鏈接?- 函數(shù)調(diào)用在程序執(zhí)行前就準(zhǔn)備好了。有時(shí)候這也被稱為早綁定,因?yàn)?/span> area() 函數(shù)在程序編譯期間就已經(jīng)設(shè)置好了。
虛函數(shù)?是在基類中使用關(guān)鍵字?virtual?聲明的函數(shù)。在派生類中重新定義基類中定義的虛函數(shù)時(shí),會(huì)告訴編譯器不要靜態(tài)鏈接到該函數(shù)。
我們想要的是在程序中任意點(diǎn)可以根據(jù)所調(diào)用的對(duì)象類型來選擇調(diào)用的函數(shù),這種操作被稱為動(dòng)態(tài)鏈接,或后期綁定。
想要在基類中定義虛函數(shù),以便在派生類中重新定義該函數(shù)更好地適用于對(duì)象,但是您在基類中又不能對(duì)虛函數(shù)給出有意義的實(shí)現(xiàn),這個(gè)時(shí)候就會(huì)用到純虛函數(shù)。
??-數(shù)據(jù)封裝
數(shù)據(jù)抽象是指,只向外界提供關(guān)鍵信息,并隱藏其后臺(tái)的實(shí)現(xiàn)細(xì)節(jié),即只表現(xiàn)必要的信息而不呈現(xiàn)細(xì)節(jié)。數(shù)據(jù)抽象是一種依賴于接口和實(shí)現(xiàn)分離的編程(設(shè)計(jì))技術(shù)。
數(shù)據(jù)抽象有兩個(gè)重要的優(yōu)勢(shì):
-類的內(nèi)部受到保護(hù),不會(huì)因無意的用戶級(jí)錯(cuò)誤導(dǎo)致對(duì)象狀態(tài)受損。
-類實(shí)現(xiàn)可能隨著時(shí)間的推移而發(fā)生變化,以便應(yīng)對(duì)不斷變化的需求,或者應(yīng)對(duì)那些要求不改變用戶級(jí)代碼的錯(cuò)誤報(bào)告。
?-數(shù)據(jù)封裝
所有的 C++ 程序都有以下兩個(gè)基本要素:
程序語句(代碼):這是程序中執(zhí)行動(dòng)作的部分,它們被稱為函數(shù)。
程序數(shù)據(jù):數(shù)據(jù)是程序的信息,會(huì)受到程序函數(shù)的影響。
封裝是面向?qū)ο缶幊讨械陌褦?shù)據(jù)和操作數(shù)據(jù)的函數(shù)綁定在一起的一個(gè)概念,這樣能避免受到外界的干擾和誤用,從而確保了安全。數(shù)據(jù)封裝引申出了另一個(gè)重要的 OOP 概念,即數(shù)據(jù)隱藏。
數(shù)據(jù)封裝是一種把數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)捆綁在一起的機(jī)制,數(shù)據(jù)抽象是一種僅向用戶暴露接口而把具體的實(shí)現(xiàn)細(xì)節(jié)隱藏起來的機(jī)制。
數(shù)據(jù)封裝的實(shí)例
C++ 程序中,任何帶有公有和私有成員的類都可以作為數(shù)據(jù)封裝和數(shù)據(jù)抽象的實(shí)例。
參考資料:
C++?教程?|?菜鳥教程?(runoob.com)
https://www.runoob.com/cplusplus/cpp-tutorial.html
公眾號(hào)二維碼
End:如果有興趣了解量化交易、數(shù)據(jù)分析和互聯(lián)網(wǎng)+的實(shí)用技術(shù),歡迎關(guān)注本公眾號(hào)
