首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 從結構體到類別:封裝、繼承與多態的基石

     編輯:關於C++

前言:面向物件程式設計的三大支柱

C++ 相較於 C 語言最大的優勢在於支援面向物件程式設計(OOP),其核心特性為封裝性、繼承性與多態性。封裝將資料與操作資料的函式綁定在一起,不僅使程式結構更緊湊,更提升了資料安全性;繼承增強了軟體擴充性與程式碼重用;多態讓設計者能以更高層次的抽象處理問題,利於維護與重用。Visual C++ 不只是編譯器,更是完整的應用程式開發環境,配合 C++ 的 OOP 特性可開發專業級 Windows 應用程式。

從結構體到類別:關鍵演進

C 語言結構體的侷限

C 語言的 struct 僅能將多個相關變數包裝成一個整體,成員只能是資料,不能包含函式。因此它只能描述物件的「狀態」(屬性),無法描述「行為」(方法)。

C++ 擴充結構體:可包含成員函式

C++ 延伸了 struct,允許在其中定義成員函式。範例:

struct Point {
    int x, y;
    void output() {
        cout << x << endl << y << endl;
    }
};

void main() {
    Point pt; pt.x = 0; pt.y = 0;
    pt.output(); // 呼叫成員函式
}

此時結構體已具備「狀態+行為」的基本物件特徵。

關鍵字 class 與預設存取控制差異

將 struct 換成 class 即為類別定義。兩者語法幾乎相同,核心差異在於預設存取層級:

  • struct:預設 public(所有成員對外可見)
  • class:預設 private(成員僅類別內部可存取)

範例:

class Point {
    int x, y; // 私有
    void output() { cout << x << endl << y << endl; } // 私有
};

若在 main() 中嘗試存取 pt.x 或呼叫 pt.output(),編譯器會報錯:「無法存取私有成員」。

類別私有成員存取錯誤示意圖

圖 1:在類別外部存取私有成員導致編譯錯誤

存取指定詞:public、private、protected

為控制成員可見性,C++ 提供三種存取指定詞:

存取層級類別內部衍生類別類別外部
public✓✓✓
protected✓✓✗
private✓✗✗

良好實務:資料成員設為 private,透過 public 成員函式(存取器/修改器)提供受控存取,這就是封裝的精髓。

標準輸入輸出流:iostream 基礎

C++ 提供型別安全、可擴充的 I/O 流機制,取代 C 的 scanf/printf:

  • cin(標準輸入)搭配 >> 運算子
  • cout(標準輸出)搭配 << 運算子
  • cerr(標準錯誤輸出)同 <<

優點:無需格式字串,編譯器自動根據型別處理輸入輸出。範例:

int i; cin >> i; // 自動處理整數輸入
cout << "Value: " << i << endl; // endl 換行並刷新緩衝區

需包含 <iostream>(現代標準)或 <iostream.h>(舊式)。

註解風格

  • 單行註解:// 這是註解
  • 多行註解:/* 多行註解 */

定義類別/結構體的語法提醒

右大括號後必須加分號:

class MyClass { ... }; // 別漏了分號!
struct MyStruct { ... };

總結:從結構體到類別的觀念轉變

特性C structC++ structC++ class
包含資料✓✓✓
包含函式✗✓✓
預設存取publicpublicprivate
支援繼承✗✓✓
支援多態✗✓✓

掌握結構體到類別的演進,理解封裝與存取控制,是學習 C++ 面向物件程式設計的第一步。後續將深入探討建構子/解構子、繼承機制、虛擬函式與多態實作等核心主題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved