說起概念、讀起概念都是乙個枯燥無味的過程,在這裡,首先用乙個現實生活例子來模擬,簡單的描述一下類和物件。
就好比人類,就是乙個類,是乙個抽象的描述,而具體到某個人,具體的這個人就是乙個物件,物件是類的例項化。
每個人有不同的屬性,即成員變數,還有相同的行為,即成員函式。
c語言雖然是面向過程的程式語言,但是c語言中已經存在有給物件導向鋪墊的資料型別——結構體。結構體把若干個成員變數封在一起,但是c語言中的struct只有封裝了若干個變數,c++完成了進一步更完善的封裝,類型別不只是有屬性,還封裝了行為,行為即稱為類的方法或者成員函式。
類和結構體一樣,也是一種自定義的型別,用類型別建立乙個物件的過程 即是類的例項化。
簡單的定義人這個類,**如下:
以下**自定義了「人」這個類,然後用人這個類型別建立了物件小紅
class
person
}//小紅即是「人」類建立的物件,即例項化物件
person xiaohong;
實現封裝的方式:用類將物件的屬性與方法結合在一塊(上面的例子有所體現),讓物件更完善,通過訪問許可權選擇性的將介面提供給外部的使用者使用。
訪問限定符:public(共有)、protected(保護)、private(私有)
說明:乙個類的大小,實際就是該類中**「成員變數」之和**,也要進行記憶體對齊,空類的大小較特殊,編譯器給了空類乙個位元組來唯一標識這個類。1.public修飾的成員在類外可以直接訪問
2.protected和private修飾的成員在類外不能直接被訪問
3.訪問許可權作用域從該訪問限定符出現的位置開始知道下乙個訪問限定符出現時為止
4.class的預設訪問許可權是private,struct為public(因為struct要相容c)
注:訪問限定符只在編譯時有用,當資料對映到記憶體後,沒有任何訪問限定符上的區別
「空類」大小也拿乙個形象的例子來理解,大學中常見的佔座位來說,用自己的書佔了乙個座位,別人就會知道這個座位有人,同樣的道理,空類用1個位元組來標識這個類的存在。
下面**a的大小為4,b的大小為1,c的大小為1;
//有成員函式也有成員變數
class
aprivate
:int a;};
//僅有成員函式
classb}
;//空類
class
c;
結構體內存對齊規則
記憶體對齊的原因:是為了提高資料成員的訪問效率
對齊規則:
第乙個成員在與結構體偏移量為0的位址處。
其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。注意:對齊數=編譯器預設的乙個對齊數與該成員大小的較小值。
可以通過#pragma pack(size)設定預設對齊數為size。
vs中預設的對齊數為8,gcc中的對齊數為4。
結構體總大小為:最大對齊數(所有變數型別最大者與預設對齊引數取最小)的整數倍。
如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍。
c++編譯器給每個「成員函式「增加了乙個隱藏的指標引數,讓該指標指向當前物件(函式執行時呼叫該函式的物件),在函式體中所有成員變數的操作,都是通過該指標去訪問。只不過所有的操作對使用者是透明的,即使用者不需要來傳遞,編譯器自動完成。
1.this指標的型別:
類型別* const
2.只能在「成員函式」內部使用
3.this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this形參。所以物件中不存在this指標
4.this指標是成員函式第乙個隱含的指標形參,一般情況有編譯器通過ecx暫存器自動傳遞,不需要使用者傳遞。
下面的display函式並不需要傳入this指標,this指標時隱含的,只是為了理解才這樣說明的。
class
date
}
C 類和物件 類和物件
c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...
C 物件和類
1,特殊的類 字串string include include using namespace std int main 類似於標準庫函式,我們不需要記住每種 類 的全部操作,只需要在使用過程中記住一些常用的操作就可以了。如果有需要的話,可以求助於相關書籍或網路 2,當我們對string進行種種操作...
C (類和物件)
類成員函式 類的成員函式指標那些把定義和原型寫在類定義內部的函式,就想類定義中的其他變數一樣。類訪問修飾符 類成員可以定義為public,private或protected。預設情況下是定義為private。建構函式 類的建構函式是一種特殊的函式,在建立乙個新物件是呼叫。析構函式 類的析構函式也是一...