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

C++ 面向物件程式設計入門:類別 基礎與核心觀念

     編輯:關於C++

一、從結構體到類別

C 語言使用 struct 組合資料,C++ 引入 class 將資料與操作封裝,形成「物件 = 演算法 + 資料結構」,程式由多個物件互動組成。

定義語法比較

// C 風格 struct(不可含函式)
struct test { private: int number; public: float score; };

// C++ class(可含成員函式)
class test {
private: int number;
public:
    float score;
    int rp() { return number; }      // 內部定義隱含 inline
    void setnum(int a) { number = a; }
};

術語對照

  • 類別變數 → 物件 或 實例
  • 成員變數 → 資料成員 / 屬性
  • 成員函式 → 方法

二、存取控制:public / private / protected

修飾詞可存取範圍
private僅本類別成員函式、友元
protected本類別、友元、衍生類別
public任何程式碼

預設值: class 預設 private;struct 預設 public。

封裝範例:球類遊戲計分

// ballscore.h
class ballscore {
protected:
    const static int GOOD = 5;   // 好球加分
    const static int BAD = -3;   // 壞球扣分
    float gradeScore;            // 平均分數(受保護,外部不可直接修改)
public:
    float GetGS(float good, float bad) {
        gradeScore = (good * GOOD + bad * BAD) / (good + bad);
        return gradeScore;
    }
};

// main.cpp
#include "ballscore.h"
int main() {
    ballscore jeff;
    cout << jeff.GetGS(10, 3); // 僅能透過介面取得分數
    // jeff.gradeScore = 5.5;  // 編譯錯誤:protected 成員不可外部存取
}

三、成員函式定義方式

  1. 類別內部定義:隱含 inline,適合簡短函式,避免重複編譯。
  2. 類別外部定義:使用域解析運算子 ::,格式 回傳型別 類別名::函式名(參數)。類別內需先宣告。
class test { public: void rp(); };
void test::rp() { ::globalVar = 11; this->memberVar = 100; } // :: 存取全域變數

隱含 this 指標

非靜態成員函式隱含接收 this 指標,指向呼叫物件。memberVar = 100 實為 this->memberVar = 100。

四、函式多載與指標/參考呼叫

成員函式支援多載(同名不同參數)。物件指標用 ->,參考用 . 呼叫成員:

void run(test* p) { cout << p->rp(100); }
void run(test& r) { cout << r.rp(200); }

五、類別作用域與名稱遮蔽

類別作用域限於定義與成員函式本體。常見三種遮蔽情況:

  1. 區域變數遮蔽成員:函式內 int gradeScore 遮蔽成員 gradeScore,需用 ballscore::gradeScore 存取成員。
  2. 全域變數遮蔽類別名:int ballscore = 0; 遮蔽類別 ballscore,定義物件需加 class ballscore jeff;。
  3. 區域類別遮蔽全域變數:函式內 class test { }; 遮蔽全域 int test;,存取全域需用 ::test = 1;。

六、命名空間基本規則

  1. 同一作用域內,名稱不可同時為兩種型別(如 class test; typedef int test; 錯誤)。
  2. 非型別名稱(變數、函式、物件、列舉值)不可重名。
  3. 型別名稱與非型別名稱可重名,但定義物件時需加 class 前綴區分。

七、總結:類別設計四大原則

  1. 資料保護:防止外部任意竄改內部狀態。
  2. 自我維護:類別獨自負責內部資料一致性。
  3. 介面極小化:僅公開必要操作,實現黑盒效應。
  4. 低耦合:功能獨立,不依賴特定應用環境,易於替換與重用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved