目錄
上期了解c++類中有public、protected、private三種訪問許可權。
肯定會有人疑惑,c++為什麼要設定這三個許可權呢
本期內容就是圍繞上面的問題展開說明
開始的文章就提到過,類是(oop)物件導向程式設計的基礎
那麼物件導向程式設計究竟是個什麼東東呢
百度百科是這樣解釋的
通俗的來說就是利用**將現實世界的事物抽象出來,使**更具有真實事物的行為
簡單舉個栗子
狗是人類的朋友,有很多人養狗做寵物
寵物狗有名字,年齡,毛髮顏色,等等特徵
狗還會吃飯,喝水,汪汪汪之類的行為
如果利用**抽象乙個小狗類
這些名字,年齡等就對應成員變數
吃飯喝水等行為就是成員函式
上**class dog
void drinking()
void wangwangwang()
};在現實世界中狗的名字我們可以改,但年齡和顏色我們是無法改變的,就比如狗的顏色是它本身dna決定的。我們可以分辨顏色是因為我們視力沒有問題,可以通過看的方式訪問狗的顏色
所以我們通常在**裡將成員變數設定成protected屬性
讓外部無法直接訪問,就像我們無法直接去看狗的dna序列一樣。
所以通常會定義一些成員函式來間接訪問成員變數(這裡上期講解遺漏了,下面補充一下)
protected和private無法在類外訪問,但可以在自己的類內部被成員函式訪問(對外介面)
而將這些成員函式放在public下,在類外使用這些成員函式,就相當於間接訪問無法訪問的變數
這就體現出c++物件導向中封裝的特性
我們看看百度百科中對封裝的介紹
簡單 的說,外部使用乙個封裝好的類的時候只會考慮某些介面的特定功能,而並不會關心內部的具體實現細節。
具體看下圖:
那麼進入主題,看看封裝的具體技術
基本概念:建構函式是類的成員函式,作用是在類建立物件時用於初始化物件。
特點:函式名和類名相同且不用寫返回值,在建立物件時會自動呼叫。
語法:函式名( 形參列表 )
注意:1.建構函式不需要返回值型別
2.建構函式的函式名和類名相同
**如下:
class myclass
myclass()//建構函式 };
void test()
int main()
執行效果:
可見我們只是建立了乙個物件,並沒有對這個物件做任何操作。
我們不用自己呼叫建構函式,編譯器在建立物件時自動呼叫建構函式,為變數初始化。
1.建構函式分類
建構函式大概分無參構造、有參構造、拷貝構造三種
上述**中的建構函式就是乙個典型的無參構造
2.有參建構函式:
例如以下**:(有參構造的3個過載)
myclass(int i)
myclass(int i, char c)
myclass(int i,char c,string str)
3.有參建構函式3個呼叫規則:
括號法:
//使用有參建構函式建立物件 cla2,cla3,cla4
myclass cla2(10);
myclass cla3(10, 'b');
myclass cla4(10, 'b', "str in myclass_cla2");
等號法:
//使用有參建構函式建立物件(等號法)
myclass cla5 = 10;
myclass cla6 = (10, 'b');
直接呼叫建構函式
//使用有參建構函式建立物件(呼叫建構函式)
myclass cla7 = myclass(10);
myclass cla8 = myclass(10, 'b');
myclass cla9 = myclass(10, 'b', "str in myclass");
4.拷貝建構函式
myclass(myclass& cla)
注意:拷貝建構函式的形參是自身型別的引用
拷貝構造函式呼叫
//使用拷貝建構函式建立物件
myclass cla11(cla8);
myclass cla12 = cla9;
5.析構函式
基本概念:在物件被釋放時編譯器會自動呼叫析構函式,用於釋放物件中變數的記憶體空間
語法:函式名( 形參列表 )
注意:1.建構函式不需要返回值型別
2.建構函式的函式名為 ~(類名)
特點:函式名和類名相同且不用寫返回值,在建立物件時會自動呼叫。
有人會問,物件記憶體被釋放時成員變數記憶體空間不是也被釋放了嗎
我們先看一段**
class myclass
};這個myclass類,類成員變數中在記憶體堆區開闢乙個整型變數
堆區記憶體需要手動釋放,不然會造成記憶體洩漏,此時析構函式就派上用處了
以下為析構函式**實現:
~myclass()
由於製作倉促,如有錯誤敬請指正
本期簡單介紹oop物件導向程式設計和建構函式,析構函式。
本文標題: c++:建構函式,析構函式詳解
本文位址: /ruanjian/c/420345.html
C 建構函式,析構函式,拷貝建構函式詳解
二 建構函式的分類及呼叫 三 拷貝構造函式呼叫時機 四 構造函式呼叫規則 五 深拷貝與淺拷貝 六 類物件作為類成員的呼叫規則 七 靜態成員 c 利用建構函式和析構函式進行物件的初始化和清理,這兩個函式將會被編譯器自動呼叫,完成物件初始化和清理工作。物件的初始化和清理工作是編譯器強制要我們做的事情,因...
C 建構函式詳解和析構函式詳解
首先來了解下建構函式的定義 c 建構函式是一種特殊的成員函式,它的作用主要用於為物件分配儲存空間,對資料成員進行初始化。接下來看一下他的語法定義形式 訪問修飾符 識別符號 引數列表 base 引數列表 this 引數列表 解釋 識別符號 就是類名,並且必須是類名。引數列表 就是方法或者函式的引數列表...
C 建構函式 析構函式 虛析構函式
一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...