物件陣列的例項。
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 允許乙個類將其成員...