C 封裝學習(二)

2021-07-10 08:33:27 字數 2046 閱讀 3750

物件陣列的例項。

class coordinate

;int main()

在用new申請陣列空間後,要用delete p來釋放掉記憶體,那為什麼要加呢。

在申請乙個物件陣列時,分別呼叫了n次的建構函式,在釋放時也要呼叫n次析構函式,如果不加,那麼只銷毀指標指向的第乙個元素。

在實際應用中,物件中包含物件是很常見的,如乙個房間有桌子等家具。以下為**例項。

class coordinate//座標系上的點

;class line//座標系上的線

;int main()

那麼,在例項化物件時,是先例項化點還是先例項化線呢》

在例項化線時,先例項化a,再例項化b,最後例項化line。銷毀時正好與建立的過程相反。

拷貝建構函式分為深拷貝和淺拷貝。乙個淺拷貝的例項**。

class array

//建構函式,指向堆申請的記憶體

array(const array& arr)//拷貝建構函式

private:

int m_icount;

int *m_parr;//指標

};int main()

這種情況很危險,因為兩個指標指向統一記憶體,當改變arr1的記憶體,arr2的內容也勢必會被改變,當釋放arr1時,arr2也會釋放,會引起崩潰。因此要實現深拷貝,即兩個指標指向不同的記憶體,如圖。

要實現深拷貝,**如下。

class array

//建構函式,指向堆申請的記憶體

array(const array& arr)//拷貝建構函式,深拷貝 }

private:

int m_icount;

int *m_parr;//指標

};int main()

物件指標,就是指標指向乙個物件。

class coordinate//座標系上的點

;coordinate *p = new coordinate;//在堆中例項化

在例項化是,p的指標實際指向的是m_ix,在例項化物件時,下列**中的注釋部分也是符合語法的。

int main()

物件成員指標,在累的成員中包含指標,如下**。

class coordinate//座標系上的點

;class line//座標系上的線

;

在建構函式時,可以初始化列表構造,也可以普通構造,因為是指標,所以可以置為null。

line::line() :m_pcoora(null), m_pcoorb(null)//初始化列表初始

line::line()//普通初始化

當然更一般的是賦予指標值。

line::line()//普通初始化

line::~line()

特別值得注意的是,如果用sizeof檢視line的話,那麼列印出為8,因為每個指標位址是4個記憶體單元。而不是16(4個int)。

this指標。

一般來說,類函式的傳遞引數和成員不同名,如下代買所示。

class array

int getlen()

void setlen(int _len)

private:

int len;

};

那麼,如果同名的話,會發生什麼,如下**,編譯器會報錯,因為無法分辨哪個是作為引數的len。

class array

int getlen()

void setlen(int len)

private:

int len;

};

因此,我們需要一種技術來標註出引數或者標註出資料成員。這就是this指標。

c 學習之 封裝

封裝 封閉 讓你的隱私,屬於你個人 有乙個保護性的外殼或膜抱起來。1.封裝意味著保證類中的一些資料是私有的。使用封裝來控制對類的方法和字段的訪問。私有欄位和方法只能從類的內部訪問 乙個物件要想得到另乙個物件私有欄位中儲存的資料,只有乙個辦法,就是使用返回該資料的公共欄位和方法。相關問題 問 我需要通...

C 學習筆記 封裝

所謂封裝就是將某些東西包裝盒隱藏起來,讓外界無法直接使用,只能通過某些特定的方式才能訪問。封裝的目的是增強安全性和簡化程式設計,使用者不必了解具體的實現細節,而只是通過外部介面以及特定的訪問許可權來使用類的成員。類通常分為以下兩個部分 封裝的基本概念 因此,需要在類的表示法中定義屬性和行為的公開級別...

C 學習日記 封裝

在物件導向程式設計方 中,封裝是為防止對實現細節的訪問。抽象和封裝是物件導向程式設計的相關特性。抽象允許相關資訊視覺化,封裝則使開發者實現所需級別的抽象。public 允許乙個類將其成員變數和成員函式暴露給其他的函式和物件。任何共有成員可以被外部的類訪問 範圍最大 private 允許乙個類將其成員...