從微控制器的純c轉到c++還真是一段很長的學習路,記錄一點比較生僻和比較重要的知識點,只是加深點印象罷了,也能知道自己哪些地方不足,讀書百遍其義自見嘛....
1.乙個類的所有資料成員都是公有的,則它不需要提供建構函式(這樣的類,不知道有什麼存在的意義...)
2.explicit只能被應用在建構函式上,防止隱式轉換是很有必要的
3.即使是乙個const物件,當這個物件的資料成員被宣告為mutable時,這個mutalble資料成員也可以被改變
4.友元函式不是類的成員函式,所以友元函式的實現和普通函式一樣,在實現時不用"::"指示屬於哪個類,只有成員函式才使用"::"作用域符號
5.異常:異常可以穿越多層函式直接被較底層的函式截住而避免了層層上報,異常可以方便地攜帶任意多得資訊
6.在vs中檢查記憶體洩露的方法有很多,下面是一種:
debug模式下
在需要檢查記憶體的地方定義
#ifdef _debug
cmemorystate oldmemstate, newmemstate, diffmemstate;
oldmemstate.checkpoint();
#endif
#ifdef _debug
newmemstate.checkpoint();
if( diffmemstate.difference( oldmemstate, newmemstate ) )
#endif
利用trace監測到記憶體洩露後,便可以使用另乙個成員函式 cmemorystate::dumpstatistics 來檢視記憶體統計,它將幫助定位記憶體洩漏。
cmemorystate::difference 函式檢視兩個記憶體狀態物件,並檢測起始狀態和結束狀態之間未從堆釋放的任何物件。在您拍記憶體快照並用 cmemorystate::difference 比較它們之後,可以呼叫 cmemorystate::dumpstatistics 獲取有關未釋放的物件的資訊。
7.在c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。
棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。
堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。
自由儲存區,就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。
全域性/靜態儲存區,全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同占用同一塊記憶體區。
常量儲存區,這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改
8.visual studio嵌入python
檢視-》屬性管理器-》開啟microsoft.cpp.win32.user-》vc++目錄-》新增包含目錄、庫目錄
無法開啟python27_d.lib
最後選擇release,不選擇debug,搞定
9.text段:segment type: pure code
址後再執行
rdata段:字上看就是資源資料段,程式用到什麼資源資料都在這裡,資源包括你自己封包的,也包括開發工具自動封包的。
data段:這個段存放程式的全域性資料、全域性常量等。
10.如果基礎類別和衍生類別都定義了「相同名稱之成員函式」,那麼透過物件指
針呼叫成員函式時,到底呼叫到哪乙個函式,必須視該指標的原始型別而定,
而不是視指標實際所指之物件的型別而定
11.如果你期望衍生類別重新定義乙個成員函式,那麼你應該在基礎類別中把此函式設為virtual,其子類的virtual字樣可以省略。
12.由於static 成員函式不需要借助任何物件,就可以被呼叫執行,所以編譯器不會為它暗加乙個this 指標。也因為如此,static 成員函式無法處理類別之中的
non-static 成員變數static 成員函式「沒有this 引數」的這種性質,正是我們的mfc 應用程式在準備callback 函式時所需要的。( callback 函式必須是"static",才能去除隱藏的'this' 指標)
13.出現在巨集定義之中的##,用來告訴編譯器,把兩個字串繫在一起,在c語言的巨集中,#的功能是將其後面的巨集引數進行字串化操作(stringfication),簡單說就是在對它所引用的巨集 變數通過替換後在其左右各加上乙個雙引號。
14.怎樣才能建立在整個類中都恆定的常量呢?別指望 const 資料成員了(也別用define),應該用類中的列舉常量來實現。例如
class a
; // 列舉常量
int array1[size1];
int array2[size2];
}; 15.b::b(int x,int y)
:a(x)
//在初始化表裡呼叫a的建構函式
{}類的const常量只能在初始化表裡被初始化,因為它不能在函式體內用賦值的方式初始化
C 學習筆記( )
一 語法 迴圈 foreach 型別識別符號 in 表示式 code 用法 例子int temp foreach int num in temp 每次從temp取乙個元素賦給num直至取完 console.writeline n num 每行顯示乙個元素 執行結果 c 中唯讀 只寫控制 class ...
C 學習筆記
1.函式特徵 有函式頭和函式體 接受乙個引數 返回乙個值 需要乙個原型。2.c 命名規則 在名稱中只能使用字母字元 數字和下劃線 名稱的第乙個字元不能是數字 區分大寫字母和小寫字母 不能將c 關鍵字用作名稱 以兩個下劃線或下劃線和大寫字母打頭的名稱被保留給實現 編譯器及其使用的資源 使用,以乙個下劃...
c 學習筆記
屬性 屬性開頭字母大寫 屬性可以判斷輸入的非法值 屬性本身不儲存值 依靠字段 索引器 using system using system.collections.generic using system.linq using system.text namespace b try catch exc...