1.什麼是物件導向?
2.類的大小?為什麼要記憶體對齊?記憶體對齊的計算?空類的計算
3.類的4個預設成員函式的詳細使用及細節
物件導向是一種程式設計范型,同時也是一種程式開發的方法。物件指的是類的例項,將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充套件性。
類的大小
類的大小為類中的所有成員變數的大小之和。
為什麼要記憶體對齊:
1,平台原因(移植原因)
不是所有平台都能訪問任意位址上的任意資料的;某些平台只能在某些位址處取某些特定型別的資料,否則丟擲異常。
2,效能原因
資料結構(尤其是棧)應該盡可能地在自然邊界上對齊。
原因在於,為了訪問未對齊的記憶體,處理?需要作兩次記憶體訪問;?而對齊的記憶體訪問僅需要一次訪問。
總體來說:結構體的記憶體對齊是拿空間來換取時間的做法
那在設計結構體的時候,我們既要滿?足對齊,又要節省空間,如何做到:
讓占用空間小的成員盡量集中在一起。
記憶體對齊的計算
1.第乙個成員在與結構體變數偏移量為0的位址處。
2.其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。
//對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值。
vs中預設的值為8
gcc中的預設值為4
3.結構體總大小為最大對齊數(每個成員變數除了第乙個成員都有乙個對齊數)的整數倍。
4.如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含巢狀結構體
的對齊數)的整數倍。
空類的計算:
空類的大小為1;
實際上,這是類結構體例項化的原因,空的類或結構體同樣可以被例項化,如果定義對空類或者結構體取sizeof()值為0,那麼空的類或者結構體例項化出很多例項時,在記憶體位址上就不能區分該類例項化出的例項,所以,為了實現每個例項在記憶體中都有乙個獨一無二的位址,編譯器往往會給乙個空類隱含的加乙個位元組,這樣空類在例項化後在記憶體得到了獨一無二的位址,所以空類所佔的記憶體大小是1個位元組。
類的4個預設成員函式:
//class date
// // //建構函式 —- 沒有隱含的this指標
// date()
//
// date(int year, int month, int day)
//
// //拷貝建構函式 —- 沒有定義的話,編譯器會自動呼叫
// //date(date & d)
// //
// //析構函式 —- 無返回值無引數—-所以不能過載
// ~date()
//
// // //賦值操作過載 —- c++不能過載的五個運算子 ./.*/::/?:/sizeof
// bool operator==(date& d)
//
// //
//private:
// int _year;
// int _month;
// int _day;
//};
// //class seqlist
// // else
//
// }
// // ~seqlist() //析構函式—-無返回值無引數,所以不能過載
//
// //賦值過載函式 —- c++五個不能過載的操作符—- ./.*/::/?:/sizeof
//private:
// int* _a;
// int _capacity;
// int _count;
//};
// //int main()
//
實驗三 類和物件
一 實驗內容 1 graph類內容補充 如下 ifndef graph h define graph h 類graph的宣告 class graph endif graph.h 類graph的實現 include graph.h include using namespace std 帶引數的建構函...
實驗三 類和物件
part2 繪製圖形 include include graph.h using namespace std intmain main.cpp 類graph的實現 include graph.h include using namespace std 帶引數的建構函式的實現 graph graph ...
C 實驗三 類和物件(1)
實驗名稱 實驗三 類和物件 1 實驗內容 設計乙個用於描述三維空間中的點的類,為其設計必要的成員變數和函式,並盡量增強其功能。include include using namespace std class point point string name,double x,double y,dou...