2.6 類的物件大小的計算
2.7 類成員函式的this指標
c語言是面向過程的,關注的是過程,分析出求解問題的步驟,通過函式呼叫逐步解決問題。c++是基於物件導向的,關注的是物件,將一件事情拆分成不同的物件,靠物件之間的互動完成。
c語言中,結構體中只能定義變數,在c++中,結構體內不僅可以定義變數,也可以定義函式。
struct student
void
printstudentinfo()
char _name[20]
;char _gender[3]
;int _age;};
intmain()
上面結構體的定義,在c++中更喜歡用class來代替。
class
classname
;// 一定要注意後面的分號
class為定義類的關鍵字,classname為類的名字,{}中為類的主體,注意類定義結束時後面分號。類的兩種定義格式類中的元素稱為類的成員:類中的資料稱為類的屬性或者成員變數; 類中的函式稱為類的方法或者成員函式。
宣告和定義全部放在類體中,需要注意:成員函式如果在類中定義,編譯器可能會將其當成內聯函式處理。宣告放在.**件中,類的定義放在.cpp檔案中。
一般情況下,更期望採用第二種方式。
類定義了乙個新的作用域,類的所有成員都在類的作用域中。在類體外定義成員,需要使用 :: 作用域解析符指明成員屬於哪個類域。
class
person
;// 這裡需要指定printpersoninfo是屬於person這個類域
void person::
printpersoninfo()
用類型別建立物件的過程,稱為類的例項化。1 類只是乙個模型一樣的東西,限定了類有哪些成員,定義出乙個類並沒有分配實際的記憶體空間來儲存它
2 乙個類可以例項化出多個物件,例項化出的物件占用實際的物理空間,*只儲存類成員變數
3 舉個例子。類例項化出物件就像現實中使用建築設計圖建造出房子,類就像是設計圖,只設計出需要什
麼東西,但是並沒有實體的建築存在,同樣類也只是乙個設計,例項化出的物件才能實際儲存資料,佔
用物理空間
c++實現封裝的方式:用類將物件的屬性與方法結合在一塊,讓物件更加完善,通過訪問許可權選擇性的將其訪問限定符的說明介面提供給外部的使用者使用。
訪問限定符
c++中struct和class的區別是什麼?c++需要相容c語言,所以c++中struct可以當成結構體去使用。另外c++中struct還可以用來定義類。
和class是定義類是一樣的,區別是struct的成員預設訪問方式是public,class是struct的成員預設訪問方式
是private。
物件導向的三大特性:封裝、繼承、多型。在類和物件階段,我們只研究類的封裝特性,那什麼是封裝呢?
封裝:將資料和運算元據的方法進行有機結合,隱藏物件的屬性和實現細節,僅對外公開介面來和物件進行
互動。封裝本質上是一種管理:我們如何管理兵馬俑呢?比如如果什麼都不管,兵馬俑就被隨意破壞了。那麼我們
首先建了一座房子把兵馬俑給封裝起來。但是我們目的全封裝起來,不讓別人看。所以我們開放了售票通
道,可以買票突破封裝在合理的監管機制下進去參觀。類也是一樣,我們使用類資料和方法都封裝到一下。
不想給別人看到的,我們使用protected/private把成員封裝起來。開放一些共有的成員函式對成員合理的訪
問。所以封裝本質是一種管理。
只儲存成員變數,成員函式存放在公共的**段結構體的記憶體對齊規則參考:乙個類的大小,實際就是該類中」成員變數」之和,當然也要進行記憶體對齊,注意空類的大小,空模擬
較特殊,編譯器給了空類乙個位元組來唯一標識這個類。
我們先來定義乙個日期類date
class
date
void
setdate
(int year ,
int month ,
int day)
private
:int _year ;
// 年
int _month ;
// 月
int _day ;
// 日};
intmain()
對於上述類,有這樣的乙個問題:date類中有setdate與display兩個成員函式,函式體中沒有關於不同物件的區分,那當s1呼叫setdate函式
時,該函式是如何知道應該設定s1物件,而不是設定s2物件呢?
c++中通過引入this指標解決該問題,即:c++編譯器給每個「非靜態的成員函式「增加了乙個隱藏的指標參
數,讓該指標指向當前物件(函式執行時呼叫該函式的物件),在函式體中所有成員變數的操作,都是通過該
指標去訪問。只不過所有的操作對使用者是透明的,即使用者不需要來傳遞,編譯器自動完成。
1 this指標的型別:類型別* const2 只能在「成員函式」的內部使用
3 this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this
形參。所以物件中不儲存this指標。
4 this指標是成員函式第乙個隱含的指標形參,一般情況由編譯器通過ecx暫存器自動傳遞,不需要使用者
傳遞
C 類與物件1
我們都知道c語言是一門面向過程語言,而c 是一門物件導向的語言,那麼何為面向過程 物件導向呢?面向過程就是關注的是過程,分析求解問題的步驟,通過呼叫函式逐步解決問題,而物件導向關注的是物件,將一件事情拆分成不同的物件,靠物件之間的互動完成。在c語言中我們用關鍵字struct來定義結構體,結構體只能定...
C 中的類與物件
什麼是類與物件?類是一種抽象化的資料型別,一般而言,它包括資料與處理資料的函式這兩大部分。而物件則是對某一類的例項。例如 class cmyclass cmyclass為類 cmyclass myclass myclass為物件1.類的定義與特點 類的定義示例如下 class cmyclass 各個...
c 中的類與物件
我們都知道,在c語言中,結構體是指一系列相同型別或者不同型別的資料構成的資料集合。在c語言中我們將結構體定義為 struct student 而我們知道,在c語言中,資料 和 處理資料的操作 函式 是分開的,語言本身並沒有支援 資料和函式 之間的關聯性。所以在c語言的結構體中,只能存放資料,定義變數...