c語言是面向過程的,關注的是過程,分析出求解問題的步驟,通過函式呼叫逐步解決問題。
例如:如何將大象裝進冰箱?
第一步:開啟冰箱
第二步:把大象塞進冰箱
第三步:關上冰箱…
c++是基於物件導向的,關注的是物件,將一件事情拆分成不同的物件,靠物件之間的互動完成。
例如:把車開走。抽象兩個物件:人和車。具體描述人與車的資訊及各自的功能,通過人物件和車物件相互之間的互動,把車開走。
c語言中,結構體中只能定義變數,在c++中,結構體內不僅可以定義變數,也可以定義函式。
struct student
void
printstudentinfo()
char _name[20]
;char _gender[3]
;int _age;};
intmain()
在c++中更喜歡用class來代替。
class
classname
;//注意分號
class為定義類的關鍵字,classname為類的名字,{}中為類的主體,注意類定義結束時後面分號。
類的兩種定義方式:
1.宣告和定義全部放在類體中,需要注意:成員函式如果在類中定義,編譯器可能會將其當成內聯函式處理。
class
person
public
:char _name[20]
;char _gender[3]
;int _age;
};
2.宣告放在.**件中,類的定義放在.cpp檔案中
person.h
class
person
;
person.cpp
#include
"person.h"
void person::
showinfo()
一般情況下採用第二種方式類定義了乙個新的作用域,類的所有成員都在類的作用域中。在類體外定義成員,需要使用 :: 作用域解析符指明成員屬於哪個類域。
class
person
;void person::
showinfo()
//需寫上person::
用類型別建立物件的過程,稱為類的例項化。類只是乙個模型一樣的東西,限定了類有哪些成員,定義出乙個類並沒有分配實際的記憶體空間來儲存它。乙個類可以例項化出多個物件,例項化出的物件 占用實際的物理空間,儲存類成員變數 。
打個比方:類就好比設計房子的圖紙,類例項化處的物件就好比根據圖紙建造出的房子。
6.1 訪問限定符
訪問限定符包括:public(公有)private(私有)protected(保護)
說明:
1.public修飾的成員在類外可以直接被訪問
2.protected和private修飾的成員在類外不能直接被訪問(此處protected和private是類似的)
3.訪問許可權作用域從該訪問限定符出現的位置開始直到下乙個訪問限定符出現時為止。
4. class的預設訪問許可權為private,struct為public(因為struct要相容c)
6.2 封裝
封裝:將資料和運算元據的方法進行有機結合,隱藏物件的屬性和實現細節,僅對外公開介面來和物件進行互動。
舉例:c++如何實現封裝特性?
採用class來定義類,將資料和方法進行有機結合,class預設訪問許可權是private,所有成員都不能在類外被直接使用,通過訪問限定符,提供公有的介面來讓物件之間互動。
乙個類的大小,實際就是該類中」成員變數」之和,當然也要進行記憶體對齊,注意空類的大小,空模擬 較特殊,編譯器給了空類乙個位元組來唯一標識這個類。
舉例:類物件s1的大小為28位元組
class
student
void
printstudentinfo()
public
:char _name[20]
;char _gender[3]
;int _age;};
intmain()
class
student
void
printstudentinfo()
public
:char _name[20]
;char _gender[3]
;int _age;};
intmain()
如上**,student類中有setstudentinfo與printstudentinfo兩個成員函式,函式體中沒有關於不同物件的區分,那當s1呼叫setstudentinfo函式時,該函式是如何知道應該設定s1物件,而不是設定s2物件呢?
c++中通過引入this指標解決該問題,即:c++編譯器給每個「非靜態的成員函式「增加了乙個隱藏的指標引數,讓該指標指向當前物件(函式執行時呼叫該函式的物件),在函式體中所有成員變數的操作,都是通過該指標去訪問。只不過所有的操作對使用者是透明的,即使用者不需要來傳遞,編譯器自動完成。
實際**如下:
class
student
void
printstudentinfo
(student*
const
this
)public
:char _name[20]
;char _gender[3]
;int _age;
};
this指標的特性1.只能在「成員函式」的內部使用
2.this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this形參。所以物件中不儲存this指標。
3.this指標是成員函式第乙個隱含的指標形參,一般情況由編譯器通過ecx暫存器自動傳遞,不需要使用者傳遞。
C 類與物件基礎知識
1.初步認識類與物件 主觀世界的抽象類別 計算機世界中的類 現實世界的實體 計算機世界的物件 在現實世界中,實體被抽象成抽象類別 在計算機世界中,類可以被例項化為物件 簡述c語言與c 的區別 c語言是面向過程的,關注的是過程,分析出求解問題的步驟,通過函式呼叫逐步解決問題 c 基於物件導向的,關注的...
C 基礎知識(類和物件)
現實世界中,將事物的屬性和行為表示出來,就可以抽象出這個事物。定義乙個結構體用來表示乙個物件所包含的屬性,函式用來表示乙個物件所具有的行為,這樣就可以表示乙個事物。在c中,行為和屬性是分開的。屬性和行為應該放在一起,一起表示乙個具有屬性和行為的物件。封裝提供一種機制能夠給屬性和行為的訪問控制權。所以...
類與物件(上篇)
c語言是面向過程的,關注的是過程,分析出求解問題的步驟,通過函式呼叫逐步解決問題。c 是基於物件導向的,關注的是物件,將一件事情拆分成不同的物件,靠物件之間的互動完成。c語言中,結構體中只能定義變數,在c 中,結構體內不僅可以定義變數,也可以定義函式。include include using na...