iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
佛心分享-IT 人自學之術

C++探險家系列 第 19

Day 19 類別

  • 分享至 

  • xImage
  •  

以下是 C 語言中類別相關概念的詳細內容,涵蓋物件類別、基本結構、基本使用及分解結構。

1. 物件類別

  • 概念:本身不支持物件導向,但結構體可用來模擬物件。
  • 封裝:數據與操作數據的函數可以封裝在一起。雖然沒有方法,但可以將函數設計為接受結構體指標。
  • 抽象:通過定義結構,只暴露需要的數據和功能,隱藏內部實現。
  • 繼承:不直接支持繼承,但可通過在一個結構中嵌套另一個結構來達到類似效果,實現"IS-A"關係。
  • 多態:可以使用函數指標來實現多態行為,允許在運行時決定調用哪個函數。

2. 基本結構

  • 結構定義:使用 struct 關鍵字定義結構,指定結構名稱和成員。
  • 結構成員:成員可以是基本數據類型、數組或其他結構體。
  • 結構變量聲明:聲明結構變量時,需要指定結構類型。

3. 基本使用

  • 賦值:可以直接賦值給結構的成員,或使用內建函數進行賦值。
  • 訪問成員:使用點運算符(.)訪問結構體的成員;使用箭頭運算符(->)訪問指向結構體的指標的成員。
  • 函數與結構:可以將結構體作為函數參數,實現對結構體的操作。

4. 分解結構

  • 嵌套結構:一個結構可以包含另一個結構,便於組織複雜數據。
  • 動態分配:可以使用 malloc 等函數動態分配結構體內存,適用於不確定大小的數據情況。
  • 釋放內存:對於動態分配的結構體,必須使用 free 釋放內存,防止內存泄漏。

結構的進階使用

  • 結構的大小:使用 sizeof 獲取結構的大小,注意內存對齊的影響。
  • 比較結構:無法直接比較結構,需逐個成員進行比較。
  • 匿名結構:可以在定義時不指定結構名稱,用於臨時數據。

實作練習(長方體體積計算):

#include <iostream>
using namespace std;

class Cuboid {
public:
    void set_values(int, int, int);
    int volume() { return x * y * z; }
private:
    int x, y, z;
};

void Cuboid::set_values(int a, int b, int c) {
    if (a <= 0 || b <= 0 || c <= 0) {
        cout << "長寬高應大於0" << endl;
        return; 
    }
    x = a;
    y = b;
    z = c;
}

int main(void) {
    Cuboid C1;
    int x, y, z;
    cout << "請輸入長、寬、高: ";
    cin >> x >> y >> z;

    C1.set_values(x, y, z);
    cout << "長方體的體積: " << C1.volume() << endl;

    return 0;
}

說明:
這段 C++ 程式碼定義了一個 Cuboid 類,包含設置長方體維度和計算體積的功能。類中有私有變數 xyz 表示長、寬、高,並透過 set_values 函數檢查輸入是否有效。主函數中創建了 Cuboid 物件,提示用戶輸入維度,並調用相應函數計算和輸出體積。整體展示了物件導向編程的基本概念,如封裝和數據驗證。

實作練習(座標相加乘):

#include <iostream>
using namespace std;
class Coordinate {
    public:
        int x, y;
        Coordinate ( ) {};
        Coordinate (int, int );
        Coordinate operator + (Coordinate);
};

Coordinate:: Coordinate (int a, int b){
    x=a;
    y=b;
}

Coordinate Coordinate:: operator + (Coordinate coord) {
    Coordinate temp;
    temp. x = x + coord. x;
    temp. y = y + coord. y;
    return temp;
 }
 
int main (void)
{
    Coordinate C1(2, 3), C2 (1,2);
    Coordinate C3;
    C3 = C1 + C2;
    cout<<C3.x<<","<<C3.y<<endl;
    
    return 0;
}

說明:
程式碼定義了 Coordinate 類,表示二維坐標點。類中包含兩個公有成員變數 xy,以及一個自定義的加法運算符重載。構造函數用於初始化坐標,重載的 operator + 函數將兩個坐標相加並返回一個新的 Coordinate 對象。在主函數中,創建了兩個坐標 C1C2,計算它們的和 C3,並輸出結果。整個程式展示了物件導向編程中的運算符重載技術。

!!今天內容是跟著第一次學C++就上手第二版第14章前半段一起學習的!!
打程式碼時總是有些錯誤的地方導致一直跑不出來,最後我用了ChatGPT幫我看看到底是哪個環節錯誤。
雖然是跟著書本一起做學習的但我之後用了不同的程式碼來做修改,也有達到一樣的答案!很開心也希望未來可以繼續順利地執行下去。


上一篇
Day 18 動態記憶體
下一篇
Day 20 類別續集概念
系列文
C++探險家30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言