c語言中,結構體中只能定義變數,在c++中,結構體內不僅可以定義變數,也可以定義函式。
struct student
void printstudentinfo()
private:
int _a;
double _b;
};// 類中僅有成員函式
class a2
};// 類中什麼都沒有---空類
class a3
{};int main()
類物件的儲存方式猜測
(1)物件中包含類的各個成員
缺陷:每個物件中成員變數是不同的,但是呼叫同乙份函式,如果按照此種方式儲存,當乙個類建立多個物件時,每個物件中都會儲存乙份**,相同**儲存多次,浪費空間。
(2)只儲存成員變數,成員函式存放在公共的**段
結論:乙個類的大小,實際就是該類中」成員變數」之和,當然也要進行記憶體對齊,注意空類的大小,空模擬較特殊,編譯器給了空類乙個位元組來唯一標識這個類。
結構體內存對齊規則
(1)第乙個成員在與結構體偏移量為0的位址處。
(2)其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。
注意:對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值。
vs中預設的對齊數為8,gcc中的對齊數為4
(3)結構體總大小為:最大對齊數(所有變數型別最大者與預設對齊引數取最小)的整數倍。
(4)如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍。
【問題:】
結構體怎麼對齊? 為什麼要進行記憶體對齊
如何讓結構體按照指定的對齊引數進行對齊
如何知道結構體中某個成員相對於結構體起始位置的偏移量
什麼是大小端?如何測試某台機器是大端還是小端,有沒有遇到過要考慮大小端的場景
this指標的引出
#include using namespace std;
class date
void init(int year, int month, int day)
private:
int _year;
int _month;
int _day;
};int main()
this指標的特性
(1)this指標的型別:類的型別* const
(2)只能在「成員函式」的內部使用。
(3)this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this形參。所以物件中不儲存this指標。
(4)this指標是成員函式第乙個隱含的指標形參,一般情況由編譯器通過ecx暫存器自動傳遞,不需要使用者傳遞。
【問題】
this指標存在**?
this指標可以為空嗎?
C 類和物件 類和物件
c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...
C 物件和類
1,特殊的類 字串string include include using namespace std int main 類似於標準庫函式,我們不需要記住每種 類 的全部操作,只需要在使用過程中記住一些常用的操作就可以了。如果有需要的話,可以求助於相關書籍或網路 2,當我們對string進行種種操作...
C (類和物件)
類成員函式 類的成員函式指標那些把定義和原型寫在類定義內部的函式,就想類定義中的其他變數一樣。類訪問修飾符 類成員可以定義為public,private或protected。預設情況下是定義為private。建構函式 類的建構函式是一種特殊的函式,在建立乙個新物件是呼叫。析構函式 類的析構函式也是一...