C++知識整理三
前言
本次總結接上次總結。看了自考成績之後,總結的慾望更加的強烈了,用我的總結來應對選擇和填空,我相信是小事一樁咯!
重點
1.簡單瞭解函式模板和類模板
template <class T> //這裡也可以使用 typename 來代替 class
T max(T m1, T m2)
{return(m1>m2)? m1:m2;}
在呼叫函式模板時,模板的引數是由函式的引數推斷出來的。注意第二行前是沒有東西的。
template <class T> //帶引數T的模板說明,可用 typename 代替 class class TAnyTemp { T x,y; //型別為T的私有資料物件 public: TAnyTemp(T X,T Y):x(X),y(Y) { } //建構函式 T getx() { return x;} //內聯成員函式,返回型別為T T gety() { return y;}
2.類是具有唯一識別符號的實體,在類中宣告的任何成員不能使用extern、auto和register關鍵字進行修飾,類中定義的資料和函式稱為這個類的成員(資料成員和成員函式),如果沒有使用關鍵字,則所有成員預設宣告為private許可權。
定義成員函式:
返回型別 類名::成員函式名(引數列表)
{
成員函式的函式體 //內部實現
}
不能再類體內給資料成員賦值,下面的方法是錯誤的:
Class Point {
int x=25,y=56;
}
3.成員函式和資料成員
類的成員函式可以直接使用自己類的私有成員(資料成員和成員函式)
類外面的函式不能直接訪問類的私有成員(資料成員和成員函式)
類外面的函式只能通過類的物件使用該類的公有成員函式
4.建構函式
當沒有為一個類定義任何建構函式的情況下,C++編譯器總要自動建立一個不帶引數的建構函式,一旦程式定義了自己的建構函式,系統將不再提供預設的建構函式。(預設也稱預設)
建構函式的特徵:
1.名稱與類名一樣;
2.不能指定返回型別,連void也不行
3.不能被繼承
建構函式和new:當使用new建立一個動態物件時,new首先分配足以儲存Point類的一個物件所需要的記憶體,然後自動呼叫建構函式來初始化這塊記憶體,再返回這個動態物件的地址。
5.複製建構函式(拷貝建構函式)
1.通常情況下,編譯器有一個預設的複製建構函式
2.在使用該類的一個物件初始化該類的另一個物件時,呼叫這個函式
3.使用物件的引用作為形式引數
6.解構函式
1.函式名稱與類名一樣(為與建構函式區分,在解構函式的前面加上一個“~”號)
2.不能指定返回型別,連void也不行
3.不能指定引數,但是可以顯式的說明引數為void,例如A::~A(void)
4.一個類只能定義一個解構函式且不能指明引數
5.在物件的生存期結束時被自動呼叫
6.不能被繼承
解構函式和delete:當使用delete刪除一個動態物件時,它首先為這個動態物件呼叫解構函式,然後再釋放這個動態物件佔用的記憶體。
當用delete釋放動態物件陣列ptr時,使用delete [ ]ptr
使運算子delete知道ptr指向的是動態物件陣列,delete將為動態陣列的每個物件呼叫一次解構函式,然後釋放ptr指向的記憶體。
7.預設解構函式
如果定義類時沒有定義解構函式,C++編譯器會產生一個函式體為空的預設解構函式。
8.this指標
使用this指標,保證了每個物件可以擁有自己的資料成員,但處理這些資料成員的程式碼可以被所有的物件共享。
C++規定:當一個成員函式被呼叫時,系統自動向它傳遞一個隱含的引數,該引數是一個指向呼叫該函式的物件的指標。
9.物件成員的初始化
在類A中說明物件成員的一般形式如下:
class A {
類名1 成員名1;
類名2 成員名2;
類名n 成員名n;
}
說明物件成員是在類名之後給出物件成員的名字。為初始化物件成員,A類的建構函式要呼叫這些物件成員所在類的建構函式,A類的建構函式的定義形式如下:
A::A(引數表0):成員1(引數表1),成員2(引數表2),成員n(引數表n){ //其他操作 }
“:”後由逗號隔開的項組成成員初始化列表,其中的引數表給出了為呼叫相應成員所在類的建構函式時應提供的引數,引數列表中的引數都來自“引數表0”。
物件成員建構函式的呼叫順序取決於這些物件成員在類中說明的順序,與他們在成員初始化列表中給出的順序無關。
當建立A類的物件時,先呼叫物件成員的建構函式,初始化物件成員,然後才執行A類的建構函式,初始化A類中的其他成員。解構函式的呼叫順序與建構函式正好相反。
總結
這篇裡面的大部分我們都簡單接觸過,但是這一篇是很重要的哦!尤其是最後一點,之後的總結還會涉及到的。