學習c++ -> 類(classes)的定義與實現
學習c++ -> 類(classes)的定義與實現
一、"類" 的介紹
在c++中, 用 "類" 來描述 "物件", 所謂的"物件"是指現實世界中的一切事物。那麼類就可以看做是對相似事物的抽象, 找到這些不同事物間的共同點, 如自行車和電單車, 首先他們都屬於"物件", 並且具有一定得相同點, 和一些不同點, 相同點如他們都有質量、都有兩個輪子, 都是屬於交通工具等。"都有質量"、"兩個輪子"屬於這個物件的屬性, 而"都能夠當做交通工具"屬於該物件具有的行為, 也稱方法。
類是屬於使用者自定義的資料型別, 並且該型別的資料具有一定的行為能力, 也就是類中說描述的方法。通常來說, 乙個類的定義包含兩部分的內容, 一是該類的屬性, 另一部分是它所擁有的方法。以 "人類" 這個類來說, 每個人都有自己的姓名、年齡、出生日期、體重等, 為 人類 的屬性部分, 此外, 人能夠吃飯、睡覺、行走、說話等屬於人類所具有的行為。
上面舉例中所描述的 "人" 類僅僅是具有人這種物件的最基礎的一些屬性和行為, 可以稱之為人的"基類"。 再說說一些具有一些職業的人, 例如學生, 乙個學生還具有"基類"中所沒有的屬性, 如學校、班級、學號; 也可以具有基類所不具有的行為, 如每天需要去上課, 需要考試等。
學生類可以看做是基類的乙個擴充套件, 因為他具有基類的所有屬性和行為, 並且在此基礎上增加了一些基類所沒有的屬性和行為, 像"學生"這樣的類稱為"人類"這個基類的"派生類"或者"子類"。在學生的基礎上海可以進一步的擴充套件出其他更高階的類, 如"研究生"類。
到此, 我們不再更深的去介紹類的其他相關知識。
二、c++類的定義
c++中使用關鍵字class來定義類, 其基本形式如下:
class類名;
說明:
①. 類名 需要遵循一般的命名規則;
②.public與private為屬性/方法限制的關鍵字, private 表示該部分內容是私密的, 不能被外部所訪問或呼叫, 只能被本類內部訪問; 而 public 表示公開的屬性和方法, 外界可以直接訪問或者呼叫。
一般來說類的屬性成員都應設定為private, public只留給那些被外界用來呼叫的函式介面, 但這並非是強制規定, 可以根據需要進行調整;
③. 結束部分的分號不能省略。
類定義示例:
定義乙個點(point)類, 具有以下屬性和方法:
■ 屬性: x座標, y座標
■ 方法: 1.設定x,y的座標值; 2.輸出座標的資訊。
實現**如下:
classpoint
;
**說明:
上段**中定義了乙個名為 point 的類, 具有兩個私密屬性, int型的xpos和ypos, 分別用來表示x點和y點。在方法上,setpoint用來設定屬性, 也就是 xpos 和 ypos 的值;printpoint用來輸出點的資訊。
類在定義時有以下幾點需要注意:
①.類的資料成員中不能使用 auto、extern和register等進行修飾, 也不能在定義時進行初始化, 如int xpos = 0; //錯;
③.結束時的分號不能省略, 切記!
三、c++類的實現
在上面的定義示例中我們只是定義了這個類的一些屬性和方法宣告, 並沒有去實現它, 類的實現就是完成其方法的過程。類的實現有兩種方式, 一種是在類定義時完成對成員函式的定義, 另一種是在類定義的外部進行完成。
1>. 在類定義時定義成員函式
成員函式的實現可以在類定義時同時完成, 如**:
1 #include 23using
namespace
std;45
class
point613
14void printpoint() //
實現printpoint函式
1519
20private:21
intxpos;
22int
ypos;
23};
2425
intmain()
26
執行輸出:
x = 10y = 20
process returned
0 (0x0) execution time : 0.406
spress any key to
continue.
與類的定義相比, 在類內實現成員函式不再是在類內進行宣告, 而是直接將函式進行定義, 在類中定義成員函式時, 編譯器缺省會爭取將其定義為inline型函式。
2>. 在類外定義成員函式
在類外定義成員函式通過在類內進行宣告, 然後在類外通過作用域操作符::進行實現, 形式如下:
返回型別 類名::成員函式名(引數列表)
將示例中的**改用類外定義成員函式的**:
1 #include 23using
namespace
std;45
class
point6;
1516
void point::setpoint(int x, int y) //
通過作用域操作符 '::' 實現setpoint函式
1721
22void point::printpoint() //
實現printpoint函式
2327
28int
main()
29
依 setpoint 成員函式來說, 在類內宣告的形式為void setpoint(int x, int y);那麼在類外對其定義時函式頭就應該是void point::setpoint(int x, int y)這種形式, 其返回型別、成員函式名、引數列表都要與類內宣告的形式一致。
四、c++類的使用
將乙個類定義並實現後, 就可以用該類來建立物件了, 建立的過程如同 int、char 等基本資料型別宣告乙個變數一樣簡單, 例如我們有乙個point類, 要建立乙個point的物件只需要:
point 物件名;
將類進行例項化後系統才會根據該物件的實際需要分配一定的儲存空間。這樣就可以使用該物件來訪問或呼叫該物件所能提供的屬性或方法了。
還以上面的**為例, 為了減少篇幅, 我們把 point 類的實現放在 point.h 標頭檔案中, 這裡不再貼出 point 類的實現**。
1 #include2 #include "
point.h"3
4using
namespace
std;56
intmain()
7
**在編譯時會出現錯誤, 提示error: 'int point::xpos' is private, 這是cout<< m.xpos <這行造成的, 他試圖訪問乙個 private 物件中的私密資料xpos, 如果將這行去掉便可正常執行。
通過物件名.公有函式名(引數列表);的形式就可以呼叫該類物件所具有的方法, 通過物件名.公有資料成員;的形式可以訪問物件中的資料成員。
五、物件的作用域、可見域與生存週期
類物件的作用域、可見域以及生存週期與普通變數的保持相同, 當物件生存週期結束時物件被自動撤銷, 所占用的記憶體被**, 需要注意的是, 如果物件的成員函式中有使用new或者malloc申請的動態記憶體程式不會對其進行釋放, 需要我們手動進行清理, 否則會造成記憶體洩露。
--------------------
wid, 2013.02.18
學習c++ -> 類(classes)的定義與實現
C 學習筆記(類的定義)
1 public 共有訪問。不受任何限制。2 private 私有訪問。只限於本類成員訪問,子類,例項都不能訪問。3 protected 只限於本類和子類訪問,例項不能訪問。4 internal 內部訪問。只限於本專案內訪問,其他不能訪問。5 protected internal 內部保護訪問。只限...
C 類定義與實現
一 類的介紹 類是使用者自定義的型別,並且該型別具有一定的行為能力 類中說的描述方法 通常來說,乙個類中包含兩部分的內容,一是該類的屬性,另一部分是它所擁有的方法。比如說 人 這個類,具有姓名,性別,年齡等屬性 此外,人能夠吃飯,睡覺,行走等行為稱為方法。1.類的宣告 即類的成員函式宣告,以成員函式...
C 基礎學習(1) 類的定義
2.成員的訪問控制 3.類的資料成員 4.類的成員函式 5.類的宣告 本文基於西工大網課總結,總結的不好請見諒 三大特點 封裝 資料成員與行為成員相結合,視為乙個整體 類 繼承與派生 保持原有特性的基礎上,進行更具體的說明 如何定義乙個類 資料成員 成員函式 類定義位置 class data voi...