cms系統(tǒng)javaseo快速排名軟件app
文章目錄
- 函數(shù)指針
- C++中類成員的訪問權(quán)限和繼承權(quán)限問題
- 定義和聲明的區(qū)別
- C++中類的靜態(tài)成員與普通成員的區(qū)別是什么?
- 虛函數(shù)為什么不能重載為內(nèi)聯(lián)函數(shù)?
- 對ifdef endif的理解
- 如何在不使用額外空間的情況下,交換兩個數(shù)?
函數(shù)指針
-
什么是函數(shù)指針
函數(shù)指針是指向函數(shù)的指針變量,它存儲了函數(shù)的地址,允許我們通過指針調(diào)用該函數(shù)。
-
定義方式
// 語法:返回值類型 (*指針變量名)(參數(shù)列表)int (*funcPtr)(int, int);// 定義一個函數(shù)指針變量 funcPtr,它指向返回值為 int,參數(shù)為 int 和 int 的函數(shù)
- 函數(shù)指針的賦值
// 將函數(shù)的地址賦值給函數(shù)指針變量funcPtr = functionName; // functionName 是一個函數(shù)名
- 調(diào)用函數(shù)指針指向的函數(shù)
// 使用函數(shù)指針調(diào)用函數(shù),可以像調(diào)用普通函數(shù)一樣使用函數(shù)指針int result = funcPtr(10, 20);
-
一個函數(shù)名就是一個指針,它指向函數(shù)的代碼
一個函數(shù)地址是該函數(shù)的進(jìn)入點(diǎn),也就是調(diào)用函數(shù)的地址。函數(shù)的調(diào)用可以通過函數(shù)名,也可以通過指向函數(shù)的指針來調(diào)用。函數(shù)指針還允許將函數(shù)作為變元傳遞給其他函數(shù);
-
兩種方法賦值:
指針名 = 函數(shù)名; 指針名 = &函數(shù)名
C++中類成員的訪問權(quán)限和繼承權(quán)限問題
-
訪問權(quán)限
-
-
public:公有成員可以在類的內(nèi)部和外部被訪問。在類的外部可以通過對象或指針訪問,也可以在類的內(nèi)部直接訪問
-
protected:保護(hù)成員可以在類的內(nèi)部被訪問,但不能在類的外部通過對象或指針直接訪問。保護(hù)成員通常用于在派生類中繼承和訪問,在派生類中,protected相當(dāng)于公有成員,在派生類中可以被訪問
-
private:私有成員只能在類的內(nèi)部訪問。不能在類的外部通過對象或指針訪問。私有成員通常用于封裝類的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)
-
-
繼承權(quán)限
-
- public繼承:類成員在派生類中的訪問權(quán)限保持不變,也就是說,基類中的成員訪問權(quán)限,在派生類中仍然保持原來的訪問權(quán)限
- protected繼承:基類的公有成員和保護(hù)成員在派生類中的訪問權(quán)限都會變?yōu)楸Wo(hù)(protected)權(quán)限,私有成員在派生類中的訪問權(quán)限仍然是私有(private)權(quán)限
- private繼承:基類的公有成員和保護(hù)成員在派生類中都具有私有訪問權(quán)限,私有成員在派生類中不可訪問
定義和聲明的區(qū)別
-
聲明
聲明是指在程序中告訴編譯器某個標(biāo)識符(如變量、函數(shù)、類等)的存在和類型,但并不分配內(nèi)存或?qū)崿F(xiàn)具體的功能。聲明告訴編譯器該標(biāo)識符將在程序的其他地方進(jìn)行定義或?qū)崿F(xiàn)
- 對于變量:聲明僅僅告訴編譯器變量的名稱和類型
- 對于函數(shù):聲明告訴編譯器函數(shù)的名稱、參數(shù)列表和返回類型,但并不包含函數(shù)的具體實(shí)現(xiàn)
- 對于類:類的聲明通常包括類的名稱和成員函數(shù)的原型,但并不包括成員函數(shù)的實(shí)現(xiàn)和數(shù)據(jù)成員
-
定義
定義是指在程序中為標(biāo)識符(如變量、函數(shù)、類等)分配內(nèi)存空間并實(shí)現(xiàn)具體的功能。定義將標(biāo)識符與其內(nèi)存地址綁定,并分配適當(dāng)?shù)馁Y源來實(shí)現(xiàn)其功能。
- 對于變量:為變量分配內(nèi)存空間,并可以同時初始化變量的值
- 對于函數(shù):為函數(shù)提供實(shí)際的函數(shù)體,實(shí)現(xiàn)函數(shù)的功能
- 對于類:包括類的數(shù)據(jù)成員和成員函數(shù)的實(shí)現(xiàn)
-
聲明是對標(biāo)識符的類型和存在進(jìn)行聲明,而定義是為標(biāo)識符分配內(nèi)存并實(shí)現(xiàn)具體的功能。
C++中類的靜態(tài)成員與普通成員的區(qū)別是什么?
-
靜態(tài)成員變量
靜態(tài)成員屬于類本身,而不是類的特定實(shí)例(對象)
它在所有類的實(shí)例之間共享,意味著所有類的對象共用相同的靜態(tài)成員
靜態(tài)成員使用關(guān)鍵字
static
聲明,并在類聲明外部進(jìn)行定義靜態(tài)成員只在程序啟動時被初始化一次,并在程序結(jié)束時銷毀
可以使用類名來訪問靜態(tài)成員,無需創(chuàng)建類的對象
靜態(tài)成員變量存儲在靜態(tài)全局區(qū)
-
普通成員
普通成員與類的每個實(shí)例(對象)相關(guān)聯(lián)。每個對象都有自己的普通成員副本
普通成員在類聲明內(nèi)部進(jìn)行聲明和定義
每次創(chuàng)建對象時都會初始化普通成員,對象銷毀時普通成員也會被銷毀
可以通過類的對象來訪問普通成員
普通成員變量存儲在?;蚨阎?/p>
-
用途
靜態(tài)成員通常用于那些在所有類實(shí)例之間共享的變量,如類級別的常量、計數(shù)器或共享資源等
普通成員用于類的每個對象具有不同值的變量和函數(shù)
總結(jié):靜態(tài)成員在所有類對象之間共享,具有類范圍,而普通成員與每個對象相關(guān)聯(lián),具有對象范圍。
虛函數(shù)為什么不能重載為內(nèi)聯(lián)函數(shù)?
- 虛函數(shù)不能聲明為內(nèi)聯(lián)函數(shù),因?yàn)樘摵瘮?shù)需要在運(yùn)行時進(jìn)行動態(tài)綁定,而內(nèi)聯(lián)函數(shù)的展開是在編譯時進(jìn)行的,兩者的機(jī)制不兼容。如果虛函數(shù)被聲明為內(nèi)聯(lián)函數(shù),編譯器會忽略虛函數(shù)的動態(tài)綁定機(jī)制,可能導(dǎo)致錯誤的結(jié)果。在使用虛函數(shù)時,應(yīng)該根據(jù)需要選擇是否聲明為內(nèi)聯(lián)函數(shù),通常情況下,編譯器會根據(jù)函數(shù)的復(fù)雜度和頻繁調(diào)用情況自動進(jìn)行內(nèi)聯(lián)展開。
對ifdef endif的理解
-
一般情況下,源程序中所有的行都參加編譯。但是有時希望對其中一部分內(nèi)容只在滿足一定條件才進(jìn)行編譯,也就是對一部分內(nèi)容指定編譯的條件,這就是“條件編譯”。有時,希望當(dāng)滿足某條件時對一組語句進(jìn)行編譯,而當(dāng)條件不滿足時則編譯另一組語句。
-
條件編譯命令最常見的形式為:
#ifdef 標(biāo)識符 程序段1 #else 程序段2 #endif
- 作用:當(dāng)標(biāo)識符已經(jīng)被定義過(一般是用#define命令定義),則對程序段1進(jìn)行編譯,否則編譯程序段2。其中#else部分也可以沒有,即:
#ifdef 標(biāo)識符 程序段1 #endif
-
在一個大的軟件工程里面,可能會有多個文件同時包含一個頭文件,當(dāng)這些文件編譯鏈接成一個可執(zhí)行文件上時,就會出現(xiàn)大量“重定義”錯誤。所以在頭文件中使用#ifdef和#ifndef是非常重要的,可以防止重定義的錯誤。
-
標(biāo)識符在理論上來說可以是自由命名的,但每個頭文件的這個“標(biāo)識”都應(yīng)該是唯一的。標(biāo)識的命名規(guī)則一般是頭文件名全大寫,前后加下劃線,并把文件名中的“.”也變成下劃線,如:stdio.h
#ifndef _STDIO_H_ #define _STDIO_H_......#endif
如何在不使用額外空間的情況下,交換兩個數(shù)?
- 算術(shù)運(yùn)算
x = x + yy = x - yx = x - y
- 異或
x = x ^ yy = x ^ yx = x ^ y