C++ 類 & 對象
C++ 在 C 語言的基礎上增加了面向對象編程,C++ 支持面向對象程式設計。類是 C++ 的核心特性,通常被稱為用戶定義的類型。
類用於指定對象的形式,它包含了數據表示法和用於處理數據的方法。類中的數據和方法稱為類的成員。函數在一個類中被稱為類的成員。
C++ 類定義
定義一個類,本質上是定義一個數據類型的藍圖。這實際上並沒有定義任何數據,但它定義了類的名稱意味著什麼,也就是說,它定義了類的對象包括了什麼,以及可以在這個對象上執行哪些操作。
類定義是以關鍵字 class 開頭,後跟類的名稱。類的主體是包含在一對花括弧中。類定義後必須跟著一個分號或一個聲明列表。例如,我們使用關鍵字 class 定義 Box 數據類型,如下所示:
class Box
{
public:
double length; // 盒子的長度
double breadth; // 盒子的寬度
double height; // 盒子的高度
};
關鍵字 public 確定了類成員的訪問屬性。在類對象作用域內,公共成員在類的外部是可訪問的。您也可以指定類的成員為 private 或 protected,這個我們稍後會進行講解。
定義 C++ 對象
類提供了對象的藍圖,所以基本上,對象是根據類來創建的。聲明類的對象,就像聲明基本類型的變數一樣。下麵的語句聲明了類 Box 的兩個對象:
Box Box1; // 聲明 Box1,類型為 Box
Box Box2; // 聲明 Box2,類型為 Box
對象 Box1 和 Box2 都有它們各自的數據成員。
訪問數據成員
類的對象的公共數據成員可以使用直接成員訪問運算符 (.) 來訪問。為了更好地理解這些概念,讓我們嘗試一下下麵的實例:
實例
#include <iostream>
using namespace std;
class Box
{
public:
double length; // 長度
double breadth; // 寬度
double height; // 高度
};
int main( )
{
Box Box1; // 聲明 Box1,類型為 Box
Box Box2; // 聲明 Box2,類型為 Box
double volume = 0.0; // 用於存儲體積
// box 1 詳述
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;
// box 2 詳述
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;
// box 1 的體積
volume = Box1.height * Box1.length * Box1.breadth;
cout << "Box1 的體積:" << volume <<endl;
// box 2 的體積
volume = Box2.height * Box2.length * Box2.breadth;
cout << "Box2 的體積:" << volume <<endl;
return 0;
}
當上面的代碼被編譯和執行時,它會產生下列結果:
Box1 的體積:210 Box2 的體積:1560
需要注意的是,私有的成員和受保護的成員不能使用直接成員訪問運算符 (.) 來直接訪問。我們將在後續的教學中學習如何訪問私有成員和受保護的成員。
類 & 對象詳解
到目前為止,我們已經對 C++ 的類和對象有了基本的瞭解。下麵的列表中還列出了其他一些 C++ 類和對象相關的概念,可以點擊相應的鏈接進行學習。
概念 | 描述 |
---|---|
類成員函數 | 類的成員函數是指那些把定義和原型寫在類定義內部的函數,就像類定義中的其他變數一樣。 |
類訪問修飾符 | 類成員可以被定義為 public、private 或 protected。默認情況下是定義為 private。 |
構造函數 & 析構函數 | 類的構造函數是一種特殊的函數,在創建一個新的對象時調用。類的析構函數也是一種特殊的函數,在刪除所創建的對象時調用。 |
C++ 拷貝構造函數 | 拷貝構造函數,是一種特殊的構造函數,它在創建對象時,是使用同一類中之前創建的對象來初始化新創建的對象。 |
C++ 友元函數 | 友元函數可以訪問類的 private 和 protected 成員。 |
C++ 內聯函數 | 通過內聯函數,編譯器試圖在調用函數的地方擴展函數體中的代碼。 |
C++ 中的 this 指針 | 每個對象都有一個特殊的指針 this,它指向對象本身。 |
C++ 中指向類的指針 | 指向類的指針方式如同指向結構的指針。實際上,類可以看成是一個帶有函數的結構。 |
C++ 類的靜態成員 | 類的數據成員和函數成員都可以被聲明為靜態的。 |