C 學習記錄之模板篇

2021-08-19 21:56:37 字數 1548 閱讀 4048

c++問題記錄之模板: 

關於友元的注意事項:

1.友元關係不可傳遞。

2.友元關係的單向性。

3.友元宣告的形式和數量不受限制。

友元只是封裝的補充。友元的使用破壞了封裝性。

友元函式沒有this指標,為什麼?

因為this指標是在指向類成員本身,但是友元函式並不在類裡面,而是在類外面

友元函式是不能被繼承的,就像父親的朋友未必是兒子的朋友。

友元包括:友元函式,友元類,友元成員函式。

友元成員函式:

普通成員函式:c++ 普通成員函式本質上是乙個包含指向具體物件this指標的普通函式,即c++類的普通成員函式都隱式包含乙個指向當前物件的this指標。

因此類的靜態成員函式和類的普通成員函式的區別是:

靜態成員函式不包含指向具體物件的this指標;

普通成員函式包含乙個指向具體物件的this指標。

靜態注意事項:

1.靜態資料成員必須單獨初始化。

2.靜態成員函式不能呼叫非靜態成員函式和非靜態資料成員。反之,非靜態的成員函式可以呼叫靜態的成員函式和靜態的資料成員。

3.靜態資料成員只有乙份,且不依賴物件而存在。

4.類的靜態成員函式沒有this指標,故不能加const關鍵字。

sizeof求物件的大小。不會包含靜態資料成員大小。

靜態成員函式上不允許修飾符

5.運算子過載:給原有的運算子賦予新的功能。

本質:函式過載。

關鍵字:operator

一元運算子過載:-(負號)和++符號的過載。

-(負號)過載:

要返回*this,即物件的引用,如果需要返回的是自身,那麼就用引用,如果返回的是臨時變數,則不用引用。

++過載(前置和後置):

後置加加重載中,需要返回的是臨時變數,前置加加中,返回的是自身的引用。

二元運算子過載(+):

函式中傳入了**的引數*this,代表加號前面的物件。如:

當前的this指向的是coor1,返回的是臨時變數temp。

而對於友元函式過載來說,友元函式不存在this指標,只能傳入兩個引數。

const可以寫,也可以不寫。

《流運算子過載:

cout是ostream的是乙個物件。

必須用友元函式,不能採用成員函式過載。因為流運算子過載函式的第乙個引數必須是ostream的乙個物件,不能是this指標(當前的物件),而作為成員函式是有this指標的。友元之後,便可以訪問類中的資料成員。

索引運算子:

模板關鍵字:template   typename   class(不是定義類的,表明資料型別的)

stl:標準模板庫

向量(vector):對陣列的封裝

特點:讀取能在常數時間內完成。

迭代器(iteration):

list(鍊錶):特點:資料插入速度比較快。使用方法和vector類似

map(對映):

list不能直接使用list[i]來直接訪問資料,故在迴圈中需要使用迭代器來對list中的資料進行遍歷。

map中沒有push_back,用insert

C 之模板篇

今天,我們來學習總結一下有關c 中模板的概念和知識。一.模板的概念 1.我們知道,函式的呼叫要根據給出的實參型別以及函式名來確定,拿通用的加法函式來說,不同的實參所呼叫的函式不同。因此我們需要通過函式過載來實現對不同型別資料的加法操作。int add const int left,const int...

C 之模板 模板的學習 學習模板

c 之模板 模板學習 學習模板 模板就是建立通用的模具,大大提高復用性 函式模板 c 提供兩種模板機制函式模板和類模板 函式模板語法 函式模板作用 建立乙個通用函式,其函式返回值型別和形參型別可以不具體制定,用乙個虛擬的型別來代表 語法 template typename t 函式宣告或定義解釋 t...

C 學習之模板

之前寫過有關c 模板的內容,但是現在回頭再看看書本,發現之前寫的東西太膚淺了。考慮的問題太不全面了。因此在這裡重寫下有關c 模板的知識總結。為什麼c 要引入模板這個概念呢?c 的發明者bjarne stroustrup曾這樣說過 這是為了支援型別安全 類容器的有效性和演算法的通用性。簡單的來說,模板...