C C 零碎知識點

2021-08-10 02:13:21 字數 4620 閱讀 4210

總是看到很多零碎的知識點,想記下來又不知道該放在**,不記的話又不知道在**去找,尷尬。

ps:不要盲目相信答案哦。

知識太雜,以後有空再分類吧

1.當派生類中不含物件成員時

· 在建立派生類物件時,建構函式的執行順序是:基類的建構函式→派生類的建構函式;

· 在撤消派生類物件時,析構函式的執行順序是:派生類的建構函式→基類的建構函式。

當派生類中含有物件成員時

· 在定義派生類物件時,建構函式的執行順序:基類的建構函式→物件成員的建構函式→派生類的建構函式;

· 在撤消派生類物件時,析構函式的執行順序:派生類的建構函式→物件成員的建構函式→基類的建構函式。

例子:

#include

using

namespace

std;

class test

~test()

};class base

~base()

};class derived : public base

~derived()

test test;

};int main()

執行結果為:

base constructing!

test constructing!

derived constructing!

derived destructing!

test destructing!

base destructing!

2.內聯函式與其他普通函式的區別是,內聯函式在生成可執行檔案時,其**塊是直接嵌入到呼叫處的,以此減少函式呼叫的開銷提高程式效能,它與巨集很類似。但是,c++ primer 上明明白白的寫過這麼一句話:內聯說明(inline specification)對於編譯器來說只是乙個建議編譯器可以選擇忽略這個建議。也就是說,是否以嵌入式方式存在,是由編譯器決定的,並不是一定。

3.面向過程是c的特性,基本單位函式

4.「++」的優先順序比「*」高

5.char a=這樣賦值沒毛病,因為編譯器會把數字當成ascll來賦值進去。

6,.下列c程式執行後c輸出結果為( )(32位)

void main()

無符號和有符號整數進行運算時,有符號整數會被提公升為無符號整數。

-3對應的二進位制表示是0xfffffffd,和2相加表示0xffffffff。

輸出結果取決於long是32位,還是64位。這個取決於編譯器和機器。

long是有符號的整型。

如果是32位,0xfffffff在補碼表示法(最高位是負數字)下是等於-1.

如果是64位,0xfffffff是屬於long的正整數範圍(負數字在第64位),等於4294967295。

7.對於函式指標比如:char (* f) (char*) = func;它的表示方式可以是

(*f1)(s),與f1(s)

8.「%」取餘只能針對int型,對於浮點數要用庫函式fmod。

9.c語言允許函式值型別預設定義,此時該函式值隱含的型別是整形。

10.在c++中,為了讓某個類只能通過new來建立(即如果直接建立物件,編譯器將報錯),應該將析構函式設為私有。編 譯器在為類物件分配棧空間時,會先檢查類的析構函式的訪問性,其實不光是析構函式,只要是非靜態的函式,編譯器都會進行檢查。如果類的析構函式是私有的,則編譯器不會在棧空間上為類物件分配記憶體。 因此, 將析構函式設為私有,類物件就無法建立在棧(靜態)上了,只能在堆上(動態new)分配類物件 。

11.函式中的區域性變數,如果不專門宣告為static儲存類別,都是動態的分配儲存空間的,資料儲存在動態儲存區中。這類變數叫做自動變數,自動變數可以用關鍵字auto作為儲存類別的宣告,實際上關鍵字auto是可以省略的(一般都是不寫的),不寫則自動隱含為「自動儲存類別」。

12.在內聯函式中不允許使用迴圈語句(for,while)和switch結果,帶有異常介面宣告的函式也不能宣告為內聯函式。另外,遞迴函式(自己呼叫自己的函式)是不能被用來做內聯函式的。

13.對於帶引數列表的函式,必須從右向左新增預設值。也就是說,要為某個引數設定預設值,則必須為它右邊的所有引數提供預設值。

14.

a.成員函式被過載的特徵:

(1)相同的範圍(在同乙個類中);

(2)函式名字相同;

(3)引數不同;

(4)virtual 關鍵字可有可無。

b.覆蓋是指派生類函式覆蓋基類函式,特徵是:

(1)不同的範圍(分別位於派生類與基類);

(2)函式名字相同;

(3)引數相同;

(4)基類函式必須有virtual 關鍵字。

c.「隱藏」是指派生類的函式遮蔽了與其同名的基類函式,規則如下:

(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏。

(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual 關鍵字。此時,基類的函式被隱藏.

15.對於#include後面的標頭檔案來說

雙引號:搜尋使用者所在目錄;如果找不到,搜系統指定的目錄

尖括號:僅僅搜尋系統指定目錄

16.

`int fun(unsigned

int x)

return n;

}`

17.

#include 

#include

int main();

//char b=;

printf("sizeof: s is %d,a is %d,b is %d\n",sizeof(s),sizeof(a),sizeof(b));//輸出結果4,7,6

printf("strlen: s is %d,a is %d,b is %d\n",strlen(s),strlen(a),strlen(b));//輸出結果6,6,12

}

主要說最後的輸出為啥是12,因為strlen是要遇到『\0』才會結束計算的,這裡沒有,所以它計算到了記憶體中的』\0』,因此也不一定是12,正確輸出的話,需要在字元陣列最後加上』\0』。

18.c++告訴我們在**用 new 分配的單個物件的記憶體空間的時候用 delete,**用 new 分配的一組物件的記憶體空間的時候用 delete。

關於 new 和 delete,其中又分為兩種情況:(1) 為基本資料型別分配和**空間;(2) 為自定義型別分配和**空間。

基本型別的物件沒有析構函式,所以**基本型別組成的陣列空間用 delete 和 delete 都是應該可以的;但是對於類物件陣列,只能用 delete。

所以乙個簡單的使用原則就是:new 和 delete、new 和 delete 對應使用。

19.建構函式初始化時必須採用初始化列表一共有三種情況,

1.需要初始化的資料成員是物件(繼承時呼叫基類建構函式)

2.需要初始化const修飾的類成員

3.需要初始化引用成員資料

20.c++中不能過載的運算子:「?:」、「.」、「::」、「sizeof」和」.*」

只能使用成員函式過載的運算子有:=、()、、->、new、delete。

21.const static資料成員可以在類內初始化 也可以在類外,不能在建構函式中初始化,也不能在建構函式的初始化列表中初始化

static資料成員只能在類外,即類的實現檔案中初始化,也不能在建構函式中初始化,不能在建構函式的初始化列表中初始化;

const資料成員只能在建構函式的初始化列表中初始化;

普通資料成員不能在類內初始化,可以在建構函式中初始化,也可以在建構函式的初始化列表中初始化;

22.抽象類不能初始化,不能當做返回值,不能當做引數,可以作為指標變數,因為此時還沒有初始化

23.floor : 意為地板,指向下取整,返回不大於它的最大整數 ceil : 意為天花板,指向上取整,返回不小於它的最小整數 round : 意為大約,表示「四捨五入」,而四捨五入是往大數方向入。math.round(11.5)的結果為12,math.round(-11.5)的結果為-11而不是-12。

24.抽象類 不能例項化,抽象類不能引數型別 和 函式返回型別

25.物件導向的五大基本原則:

單一職責原則(srp)

開放封閉原則(ocp)

黎克特制替換原則(lsp)

依賴倒置原則(dip)

介面隔離原則(isp)

26.(1) 雙目運算子過載為類的成員函式時,函式只顯式說明乙個引數,該形參是運算子的右運算元。

(2) 前置單目運算子過載為類的成員函式時,不需要顯式說明引數,即函式沒有形參。

(3) 後置單目運算子過載為類的成員函式時,函式要帶有乙個整型形參。

27.對於只做輸入的引數:

a) 始終用const限制所有指向只輸入引數的指標和引用。

b) 優先通過值來取得原始型別和複製開銷比較低的值的物件。

c) 優先按const的引用取得其他使用者定義型別的輸入。

d) 如果函式需要其引數的副本,則可以考慮通過值傳遞代替通過引用傳遞。這在概念上等同於通過const引用傳遞加上一次複製,能夠幫助編譯器更好的優化掉臨時變數。

零碎知識點

1.反斜槓也可拼接字串 window.nl ad function window.nl ad function 2.在console.log 中新增樣式 var a hello console.log c a,font size 400 background blue color white 3 通...

零碎知識點

比較數值時,不要integer,要int 1,elasticsearch查詢時不識別大寫,應全部轉為小寫.因此建立索引時盡量使用小寫 2.var param param.yanan1 yanan2 此處的用法 param 宣告了json格式的param,param.yanan1 yanan2定義了j...

彙編零碎知識點

條件碼 of overflow flag 溢位標誌,溢位時為1,否則置0.標明乙個溢位了的計算,如 結構和目標不匹配.sf sign flag 符號標誌,結果為負時置1,否則置0.zf zero flag 零標誌,運算結果為0時置1,否則置0.cf carry flag 進製標誌,進製時置1,否則置...