常數型成員函式,在類中宣告的格式有三種:
1。防止本函式誤寫引數變數的:
返回值型別 函式名(const 引數,const 引數,。。。);
2。防止本函式誤寫類物件內全部的變數的:
返回值型別 函式名(參數列) const;
3。防止其他函式誤寫返回位址或引用的:
const 返回值型別 函式名(參數列);
拷貝建構函式定義的格式為:
建構函式名(const 源類名& 引用物件形參名)
拷貝型建構函式是將前乙個物件做函式定義所需的引用型的實參直接傳遞給後乙個新物件,然後另外再給新物件內的指
針成員分配新的記憶體位址空間並完成相應位址內容的複製。
拷貝型建構函式的引用必須遵循下述規則:
1。必須在定義類物件的同時將另乙個物件作為引數賦與新物件。
2。在拷貝型構造函式引數中使用const是為了避免不慎傷害做為源的物件資料
例子如下:
#include
#include
#include
class demo1
demo1(const demo1& st) //上面的二點
demo1()
void show()
~demo1()
};int main(int argc, char* argv)
基類的建構函式。析構函式,賦值函式都不能被派生類繼承。如果類之間存在繼承關係,在編寫上述基本函式時應注意以
下事項:
1。派生類的建構函式應在其初始化表裡呼叫基類的建構函式。
2。基類與派生類的析構函式應該為虛(即加virtual關鍵字)
例如:class base
輸出結果為:~derived ~base
如果把基類的(base)virtual去掉,則輸出結果為:~base
巨集**:
可以用巨集**提高執行效率。巨集**本身不是函式,但使用起來像函式。
預處理器用複製巨集**的方式代替函式優點如下:
1。省去了引數壓棧。生成組合語言的call呼叫,返回引數。執行return等過程。從而提高了速度。
缺點如下:容易出錯,預處理器在複製巨集**時常常產生意想不到的邊際效應。無法操作類的私有資料成員。
引用內聯函式(inline)的目的是為了解決程式中函式呼叫的效率問題。
在程式中,呼叫內聯函式時,該函式在編譯時被替代,而不是象一般函式那樣是在執行時被呼叫。
使用內聯函式時應注意如下幾點:
a。在內聯函式內不允許用迴圈語句和開關語句。
b。內聯函式的定義必須出現在內聯函式第一次被呼叫之前。
友元函式:
友元不是成員函式,但是它可以訪問類中的私有成員。
友元的作用在於提高程式的執行效率,但是,它破壞了類的封裝性和隱藏性,使得非成員函式可以訪問類的私有成員。
友元可以是乙個函式,該函式被稱為友元函式;友元也要以是乙個類,該類被稱為友元類。
類的繼承技術:
物件是類的乙個例項。如果將物件比作房子,那麼類就是房子的圖紙。
純虛函式和抽象類技術
在基類中不能對虛函式給出有意義的實現,而把它說明為純虛函式,它的實現留給該基類的派生類去做,這就是純虛
函式。stl標準模板庫
模板:一般分為模板函式和類模板。
以所處理的資料型別的說明作為引數的類就叫模板類。或者稱為類模板。
以所處理的資料型別的說明作為引數的函式,則稱為函式模板。
模板的一般定義形式為:
template 《型別形參表》返回型別 類名 《型別名錶》::成員函式名1(形參表)
模板函式:
定義形式為:template 《型別形參表》 返回型別 函式名(形參表)
類模板:
定義形式為:template 《型別形參表》 class 類名
學習記錄 C與C STL
注 僅 vector 和 string 支援對迭代器進行加減某個數字 it自增自減除外 迭代器.begin 指向首元素,而.end 指向尾元素的下乙個。quad 常用的容器即 變長陣列 字元陣列 字串 廣義陣列鍵值對 對映 集合 各種資料結構。優先使用迭代器來定位或遍歷,其通用操作多 quad 若想...
C STL學習筆記一
資料結構與演算法是程式設計的核心,stl中包含各種資料結構和優秀的演算法,確實值得深入學習,本文中雖然著重使用,但希望有心的朋友能多看看相關資料結構的實現,對於c 語言確實會有較大幫助。ps 按照網上孟巖老師的安裝方法,我出現了一些問題,後來按照上面文章所說的安裝成功。關於為何採用sgi版本stl庫...
C STL容器學習(一)
容器 一些特定型別物件的集合 順序容器 vector list forward list vector 可變大小陣列,支援快速隨機訪問 list 雙向鍊錶,只支援雙向順序訪問 forward list 單向鍊錶,只支援單向順序訪問 迭代器 迭代器 iterator 是一種物件,它能夠用來遍歷標準模板...