Class類別 (C++)

閱讀時間約 9 分鐘
使用者自訂的資料型別
  • 類別是一種自定資料型態的定義,其所產生的實際資料稱為物件(Object)
  • 與結構體struct很像,但類別的功能有,資料封裝(Data Encapsulation)、繼承(inheritance)
  1. 類別存取問題
  2. 類別定義
  3. Dafault Constructor(預設建構函式)
  4. Constructs(建構函式)
  5. Copy Constructors(拷貝建構函式)
  6. Copy Assignment Operator(拷貝指定運算子)
  7. Destructs(解構函式)
  8. 範例Code

類別存取問題

  • 類別與結構體不同之一,類別的成員可以使用public、private、protected關鍵字來設定存取權限
  1. public:任何程式均可直接存取,跟struct結構體一樣
  2. private:只能讓同類別本身所定義的函式成員進行存取
  3. protected:類別本身及其衍生類別可對其直接存取,其他部分之程式則不可。
公開程度:public(公開) > protected(不常見) > private(私有)

類別定義

  class 類別名稱

{

private:

私有成員宣告;

public:

公開成員宣告;

};
備註:未設定存取權限,預設為private(私有)
類別定義

Dafault Constructor(預設建構函式)

此建構函式沒有輸入任何參數
建立預設建構函式:
  類別名稱( )

{

初始設定;

}
建立預設建構函式
呼叫預設建構函式:
類別名稱 物件的變數名稱;
呼叫預設建構函式

Constructs(建構函式)

產生物件(Object)時,其資料成員可經由建構函式來設定初值,而建構函式是一個與類別名稱同名的函式成員一個類別至少一個Constructs(建構函式)
建立建構函式:
  類別名稱(參數列)

{

初始設定;

}
建立建構函式
呼叫建構函式:
一般:類別名稱 物件的變數名稱(輸入參數);

指標:類別名稱* 物件的指標名稱 = new 類別名稱(輸入參數)
呼叫建構函式

Copy Constructors(拷貝建構函式)

拷貝建構函式接收已存在同類別物件作為參數,為避免傳值法拷貝資料的低效率,一般使用傳參考法;然後為避免資料於拷貝時不小心被更改,通常會將此參數宣告為const。
建立拷貝建構函式:
  類別名稱(const 類別名& 物件參數)

{

資料逐員拷貝,必要時須配置記憶體;

}
建立拷貝建構函式
呼叫拷貝建構函式:
呼叫拷貝建構函式

Copy Assignment Operator(拷貝指定運算子)

以「=」舉例,想使用「=」, 達成object1 = object2。
建立拷貝指定運算子:
  類別名稱& operator=(const 類別名稱&)

{

資料逐員拷貝,必要時需配置記憶體;

回傳物件本身;

}
  • 備註1:當類別成員是配置記憶體的指標時,拷貝的是記憶體位置,而非記憶體內的資料
  • 備註2:object1 = object2被解讀為,object1.operator = (object2)
建立拷貝指定運算子
呼叫拷貝指定運算子:
呼叫拷貝指定運算子

Destructs(解構函式)

當物件不再使用時,用來清除記憶體配置,用來釋放在執行建構函式時所配置的動態記憶體
建立解構函式:
  ~類別名稱()

{

delete 有配置記憶體的類別成員;

delete[] 有配置記憶體的類別成員;

}
建立解構函式

範例Code

  #include <iostream>

using namespace std;

class x{

private:

int a;//數字a

int **b;//二維陣列b

public:

// default constructor(預設建構函式)

x(){}

// constructs(建構函式)

x(int num){

a = num;

b = new int*[a];

for (int i = 0; i < a; i++){

b[i] = new int[a];

}

for (int i = 0; i < a; i++) {

for (int j = 0; j < a; j++){

b[i][j]=i;

}

}

}




// copy constructors(拷貝建構函式)

x(const x& other) {

a = other.a;

b = new int*[a];

for (int i = 0; i < a; i++) {

b[i] = new int[a];

for (int j = 0; j < a; j++) {

b[i][j] = other.b[i][j];

}

}

}




// copy sssignment operator(拷貝指定運算子)

x& operator=(const x& other) {

a = other.a;

b = new int*[a];

for (int i = 0; i < a; i++) {

b[i] = new int[a];

for (int j = 0; j < a; j++) {

b[i][j] = other.b[i][j];

}

}

return *this;

}




// destructs(解構函式)

~x(){

for (int i = 0; i < a; i++) {

delete[] b[i];

}

}




// print()

void print(){

for (int i = 0; i < a; i++) {

for (int j = 0; j < a; j++){

cout << b[i][j] << " ";

}

cout << endl;

}

}

};


int main(){

x matric1;// 創建物件(matric1)呼叫預設建構函式

x matric2(5);// 創建物件(matric2)呼叫建構函式

x matric3(matric2);// 創建物件(matric3)呼叫拷貝建構函式


matric1 = matric2;// 呼叫拷貝指定運算子,等同:matric1.operator=(matric2);


cout<<"第一部分"<<endl;

matric2.print();


cout<<"第二部分"<<endl;

matric3.print();


cout<<"第三部分"<<endl;

matric1.print();


cout<<"第四部分"<<endl;

x* matric4=new x(2);// 創建陣列物件(matric4)

matric4->print();

delete matric4;

}
1/3
2/3
3/3

Output

  第一部分
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
第二部分
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
第三部分
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
第四部分
0 0
1 1
6會員
46Content count
這是新手寫給新手的學習程式語言基礎教學筆記,內容會以C++為主
留言0
查看全部
發表第一個留言支持創作者!
匿名李的沙龍 的其他內容
這是一個新手寫給新手的新手教學
break、continue、更進一步的for迴圈、while迴圈、switch
陣列(Array)、Vector的關係
函式(Function)、傳值法、傳位址法、傳參考法
這是一個新手寫給新手的新手教學
break、continue、更進一步的for迴圈、while迴圈、switch
陣列(Array)、Vector的關係
函式(Function)、傳值法、傳位址法、傳參考法
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
致2021畢業生         從國小、國中、高中到大學階段,每位學生都在畢業典禮上聽過畢業致詞,可能是校長、家長會長、某位高官、某個產業界的前輩,甚至是學校老師,又或者是某個領域德高望重的人,但有多少令你印象深刻?充滿興奮且情緒浮躁的畢業典禮上你忙著想待會要去哪裡party,有認真咀嚼講者所要表
Thumbnail
今日啊壽從朋友口中遇到一件事好想同大家分享,朋友今日收到一個call 要到一個單位協助執達吏。 事緣該客戶在有一個商業appartment中,因欠租多個月執達吏到場點算單位資產,初時朋友都覺得普通case 未有特別為意,但當看到其客戶appartment中有大大小小貴重物品後就開始覺得有點可惜。
Thumbnail
在經歷今年3 月後,啊壽希望有一個心理重整,心中有一個定案方能走得更遠。無論在人生當中或在個人投資組合中,在尋找過程中會有迷惘,迷失,會思疑自己方向是否正確。生活中各種大大小小的資訊,我們每天接收各個媒體的資訊,當中有多小資訊能夠令你清晰你的思路?但你有否發覺我們整整遺忘了自己“心底的資訊”。你個
Thumbnail
債券梯運作原理 Bond Ladder mechanism 在債券投資組合中其中一個常見的策略 既然講到梯當然有分幾級,通常會分 6級,點解分6級?因為這樣安排係可以做到“月月派息”效果 一月 及 七月 二月 及 八月 三月 及 九月 四月 及 十月 五月 及 十一月
Thumbnail
一般來說,Charlie空域(Class C Airspace,以下簡稱Class C)可以允許大型客機(Airlines)、學生飛行員、私人飛機(Corporate Jets)與周末業餘飛行員進入空域,而且進入空域前並不一定需要(May Not Need)航空管制員的許可。
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
致2021畢業生         從國小、國中、高中到大學階段,每位學生都在畢業典禮上聽過畢業致詞,可能是校長、家長會長、某位高官、某個產業界的前輩,甚至是學校老師,又或者是某個領域德高望重的人,但有多少令你印象深刻?充滿興奮且情緒浮躁的畢業典禮上你忙著想待會要去哪裡party,有認真咀嚼講者所要表
Thumbnail
今日啊壽從朋友口中遇到一件事好想同大家分享,朋友今日收到一個call 要到一個單位協助執達吏。 事緣該客戶在有一個商業appartment中,因欠租多個月執達吏到場點算單位資產,初時朋友都覺得普通case 未有特別為意,但當看到其客戶appartment中有大大小小貴重物品後就開始覺得有點可惜。
Thumbnail
在經歷今年3 月後,啊壽希望有一個心理重整,心中有一個定案方能走得更遠。無論在人生當中或在個人投資組合中,在尋找過程中會有迷惘,迷失,會思疑自己方向是否正確。生活中各種大大小小的資訊,我們每天接收各個媒體的資訊,當中有多小資訊能夠令你清晰你的思路?但你有否發覺我們整整遺忘了自己“心底的資訊”。你個
Thumbnail
債券梯運作原理 Bond Ladder mechanism 在債券投資組合中其中一個常見的策略 既然講到梯當然有分幾級,通常會分 6級,點解分6級?因為這樣安排係可以做到“月月派息”效果 一月 及 七月 二月 及 八月 三月 及 九月 四月 及 十月 五月 及 十一月
Thumbnail
一般來說,Charlie空域(Class C Airspace,以下簡稱Class C)可以允許大型客機(Airlines)、學生飛行員、私人飛機(Corporate Jets)與周末業餘飛行員進入空域,而且進入空域前並不一定需要(May Not Need)航空管制員的許可。