Class類別 (C++)

更新 發佈閱讀 10 分鐘

使用者自訂的資料型別

  • 類別是一種自定資料型態的定義,其所產生的實際資料稱為物件(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(私有)

raw-image



Dafault Constructor(預設建構函式)

此建構函式沒有輸入任何參數

建立預設建構函式:

  類別名稱( )

{

初始設定;

}
raw-image

呼叫預設建構函式:

類別名稱 物件的變數名稱;
raw-image



Constructs(建構函式)

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

建立建構函式:

  類別名稱(參數列)

{

初始設定;

}
raw-image

呼叫建構函式:

一般:類別名稱 物件的變數名稱(輸入參數);

指標:類別名稱* 物件的指標名稱 = new 類別名稱(輸入參數)
raw-image



Copy Constructors(拷貝建構函式)

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

建立拷貝建構函式:

  類別名稱(const 類別名& 物件參數)

{

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

}
raw-image

呼叫拷貝建構函式:

raw-image


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

以「=」舉例,想使用「=」, 達成object1 = object2。

建立拷貝指定運算子:

  類別名稱& operator=(const 類別名稱&)

{

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

回傳物件本身;

}
  • 備註1:當類別成員是配置記憶體的指標時,拷貝的是記憶體位置,而非記憶體內的資料
  • 備註2:object1 = object2被解讀為,object1.operator = (object2)
raw-image

呼叫拷貝指定運算子:

raw-image


Destructs(解構函式)

當物件不再使用時,用來清除記憶體配置,用來釋放在執行建構函式時所配置的動態記憶體

建立解構函式:

  ~類別名稱()

{

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

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

}
raw-image


範例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;

}
raw-image
raw-image
raw-image

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
留言
avatar-img
匿名李的沙龍
7會員
46內容數
這是新手寫給新手的學習程式語言基礎教學筆記,內容會以C++為主
匿名李的沙龍的其他內容
2022/08/25
Python安裝、外部程式包安裝(pip install xxx)、Hello World 【安裝Python】 Visual Studio Code-Download 進入vscode(延伸模組) 安裝中文介面(輸入ch搜尋) 安裝 搜尋命令提示字元 命令提示字元打python 創建檔案
Thumbnail
2022/08/25
Python安裝、外部程式包安裝(pip install xxx)、Hello World 【安裝Python】 Visual Studio Code-Download 進入vscode(延伸模組) 安裝中文介面(輸入ch搜尋) 安裝 搜尋命令提示字元 命令提示字元打python 創建檔案
Thumbnail
2022/08/19
Google、OneDrive、icloud 鑒於最近Google教育版雲端大開殺戒,來統計一下雲端費用。
Thumbnail
2022/08/19
Google、OneDrive、icloud 鑒於最近Google教育版雲端大開殺戒,來統計一下雲端費用。
Thumbnail
2022/04/01
Visual Studio Code Key Bindings
Thumbnail
2022/04/01
Visual Studio Code Key Bindings
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
Thumbnail
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
Thumbnail
一、存取修飾詞public / private / protected / internal 二、參數修飾詞ref / in / out >>>>>由於我們在寫程式時,會去宣告一些變數、常數相關識別詞,並且在class(類別)中會寫一些事情或動作讓程式去運行,然而這個概念就是去定義對於我們所寫的內容
Thumbnail
一、存取修飾詞public / private / protected / internal 二、參數修飾詞ref / in / out >>>>>由於我們在寫程式時,會去宣告一些變數、常數相關識別詞,並且在class(類別)中會寫一些事情或動作讓程式去運行,然而這個概念就是去定義對於我們所寫的內容
Thumbnail
這次分享資料形態中的資料型別部分,在VC#流程架構介紹中有提到它如同中文有不同的詞性,那C#程式中有哪些型別呢?我們就來看一看。 一、常用的資料型別 當然還有自訂義的型別這就要看怎麼定義了,之後看內容狀況再來提,那麼資料型態是為了要做宣告用途,告訴電腦你的資料是屬於什麼類別的,這樣在做後續資料時程式
Thumbnail
這次分享資料形態中的資料型別部分,在VC#流程架構介紹中有提到它如同中文有不同的詞性,那C#程式中有哪些型別呢?我們就來看一看。 一、常用的資料型別 當然還有自訂義的型別這就要看怎麼定義了,之後看內容狀況再來提,那麼資料型態是為了要做宣告用途,告訴電腦你的資料是屬於什麼類別的,這樣在做後續資料時程式
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
本文章將會介紹結構(Struct)的定義、簡單介紹其應用,並且補充與序列化(SerializeFile)結合的方式。
Thumbnail
本文章將會介紹結構(Struct)的定義、簡單介紹其應用,並且補充與序列化(SerializeFile)結合的方式。
Thumbnail
這篇我們來講一下還蠻重要也蠻常用到的一個自定義型別,叫:struct struct是來自於C/C++的結構,目的是把不同資料型態的參數串在一起,成為一個自定義的資料型態,我們也稱它是一個自定義的結構體。
Thumbnail
這篇我們來講一下還蠻重要也蠻常用到的一個自定義型別,叫:struct struct是來自於C/C++的結構,目的是把不同資料型態的參數串在一起,成為一個自定義的資料型態,我們也稱它是一個自定義的結構體。
Thumbnail
這篇文章主要介紹存取子讀(get)和寫(set)的概述,並且簡單介紹基本的使用方法以及其他程式呼叫範例。
Thumbnail
這篇文章主要介紹存取子讀(get)和寫(set)的概述,並且簡單介紹基本的使用方法以及其他程式呼叫範例。
Thumbnail
撰寫程式時,有沒有想過宣告的這些變數是怎麼運作的呢? 本文介紹了Value Type跟Reference Type,以及Variable的基本命名方式。
Thumbnail
撰寫程式時,有沒有想過宣告的這些變數是怎麼運作的呢? 本文介紹了Value Type跟Reference Type,以及Variable的基本命名方式。
Thumbnail
使用者自訂的資料型別
Thumbnail
使用者自訂的資料型別
Thumbnail
使用者自訂的資料型別
Thumbnail
使用者自訂的資料型別
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News