#巨集定義求最大值
>#define max(x,y) ((x)>(y)?(x):(y))
#const與define區別define
>在編譯前執行,無資料型別,僅僅在編譯前做替換const存在於程式中資料段,分配空間,有資料型別
與c中#define的異同
在c++中的用法
1. 與c中#define相同的功能:字元替換
2. 保護資料
3. 結合引用傳遞,保護資料,提高效率
#const在c++中的作用
>修飾常量 : 編譯器對其進行資料靜態型別安全檢查
>修飾形參 :func( a const &a); 傳入a的引用可以提高效率,但引用容易改變原值,所以加const保護
>修飾函式返回值:當返回指標時給返回值加const , 則返回值不能被直接修改,並且賦值給 const修飾的變數
>修飾成員函式:對於不需要修改成員變數的成員函式,都應該加const以避免誤修改成員變數。
#static有什麼作用
>在函式體,維持靜態變數在函式呼叫過程不變
>用來將變數或函式的作用於限制在本模組(檔案)內
>static函式在記憶體中只有乙份
>類中的static成員,所有物件共享。不屬於具體物件,因此需要在類外面初始化,並且不能試用this指標
#.static全域性變數/區域性變數/函式 與 普通全域性變數/區域性變數/函式 的區別
a、全域性變數:static作用域在當前檔案(只能被初始化一次,防止在別的檔案被引用)
b、區域性變數:static變數只初始化一次,下次呼叫使用上次的值
c、函式:static函式在記憶體中只有乙份,普通函式每呼叫一次都維持乙份複製品。
#.c++中的static靜態成員
a、靜態成員變數目的:替代全域性變數
b、特徵:類定義前就已經分配空間,因此必須在類外面初始化
c、satic成員的引用:《類名》::《靜態成員名》
d、satic屬於整個類而不是某個物件,因此沒有this指標,因此他只能訪問類的靜態資料和靜態函式
static的兩大特徵 :
1.永續性:
值不變2. 隱藏性:
限定變數,函式,類成員的作用範圍
3. 封裝性:作為類成員時,其他類無法訪問,本類的不同物件可以訪問(可用作物件通訊的方式)
在c中的特性及用法
-宣告及儲存:存放在全域性區,而不是程式堆疊中,因此每次呼叫值都一樣
-僅在自己的作用範圍可見(函式中,其他函式不可見;檔案中,其他檔案不可見),降低耦合度
在c++中的用法
#函式內部
#區域性靜態物件
#類中static成員
- 隱藏
- 物件間資料共享(通訊),資料持久
- 預設初始化為0
#求以下sizeof空間占用
>char p = "hello";
// 6, p為陣列,儲存了 hello+\0 ,
>char p[20] = "hello";
//20 ,p為陣列,20個元素
>char str="hello"; char p = str;
// 4, p為指標
>void func( char p[100] ){}
// 4, p為指向陣列的指標
>void *p = malloc(100);
// 4 , p為指向100位元組堆記憶體的指標
>sizeof 乙個空類物件
// 1,普通函式不佔空間,但編譯器會安插乙個char成員,以便可以分配位址
>sizeof乙個含有虛函式的物件
// 4 ,虛函式指標(指向虛函式表)
>sizeof虛繼承自a同時虛繼承自b
// 8 ,針對每個基類的繼承會有不同的虛指標
#.sizeof和strlen區別
char str = "hellow" , sizeof(str)=strlen("hellow")+1
#.內聯函式inline 與巨集定義的區別
>inline在編譯時展開,巨集在預編譯時展開
>inline函式可在編譯時直接嵌入到目標**,而巨集只是做字元替換
>inline函式會對資料型別,語法進行檢測,巨集不會
>巨集引數容易引起二義性
>inline是為了提高呼叫效率
>只有inline函式能訪問類成員,巨集定義則不行,起到封裝性
#引用和指標區別
>初始化,引用建立的同時必須初始化。
>修改,引用初始化後不可在引用別的物件,但指標可以重新指向別的物件
>不存在 null 的引用 ,因此不需要在使用引用前檢查引用的合法性
>基於以上兩點,引用比指標安全
#記憶體分配
>malloc , 分配sie個位元組空間,未初始化
>calloc ,分配n塊長度為size空間,已初始化
>reallc ,拓展空間到size
>new , delete ,在構造和析構函式中用來申請,釋放記憶體
#.構造和析構
a.構造可過載,析構不能
b.為什麼基類的析構函式是虛函式:在析構時防止只析構基類而不析構派生類的狀況發生
from wiznote
C 面試知識點
大概是一些面試可能會碰到的c 知識點。具體見effective c 3e 宣告使得名字為程式所知,而定義負責建立與名字關聯的實體 只在堆上 將建構函式和析構函式設定為保護,再定義兩個函式專門用於建立和銷毀物件。只在棧上 禁用class的new運算子,就是將class的operator new宣告為私...
《C 面試知識點》
動態記憶體 1.由內建指標管理的動態記憶體 即new和delete管理動態記憶體 直到被顯式釋放之前它都是存在的。假設該指標變數被銷毀,那該記憶體將不會自動釋放 即所謂的 記憶體洩漏 2.可以用new返回的指標來初始化智慧型指標,但必須使用直接初始化的形式,而不能隱式轉換,因為接受指標引數的智慧型指...
Linux面試總結知識點
1.一台主機要實現通過區域網與另乙個區域網通訊,需要做的工作是?定義一條本機指向目標網路閘道器的路由 2.下列關於檔案系統中元資料 比如ext2中的inode 的基本作用及ext2和ext3的根本區別描述錯誤的有?b a.ext2 inode用來定義檔案系統的結構以及描述系統中每個檔案的管理資訊,每...