總是看到很多零碎的知識點,想記下來又不知道該放在**,不記的話又不知道在**去找,尷尬。
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,否則置...