C++類和物件是什麼?C++類和物件詳解

编程帮 發表於2021-09-25

C++ 是一門物件導向的程式語言,理解 C++,首先要理解類(Class)和物件(Object)這兩個概念。下面和小編一起來學習吧

1、C++ 中的類

C++ 中的類(Class)可以看做C語言中結構體(Struct)的升級版。結構體是一種構造型別,可以包含若干成員變數,每個成員變數的型別可以不同;可以通過結構體來定義結構體變數,每個變數擁有相同的性質。

例如:

#include <stdio.h>
//定義結構體 Student
struct Student{
    //結構體包含的成員變數
    char *name;
    int age;
    float score;
};
//顯示結構體的成員變數
void display(struct Student stu){
    printf("%s的年齡是 %d,成績是 %f\n", stu.name, stu.age, stu.score);
}
int main(){
    struct Student stu1;
    //為結構體的成員變數賦值
    stu1.name = "小明";
    stu1.age = 15;
    stu1.score = 92.5;
    //呼叫函式
    display(stu1);
    return 0;
}

執行結果:

小明的年齡是 15,成績是 92.500000

C++ 中的類也是一種構造型別,但是進行了一些擴充套件,類的成員不但可以是變數,還可以是函式;通過類定義出來的變數也有特定的稱呼,叫做“物件”。

例如:

#include <stdio.h>
//通過class關鍵字類定義類
class Student{
public:
    //類包含的變數
    char *name;
    int age;
    float score;
    //類包含的函式
    void say(){
        printf("%s的年齡是 %d,成績是 %f\n", name, age, score);
    }
};
int main(){
    //通過類來定義變數,即建立物件
    class Student stu1;  //也可以省略關鍵字class
    //為類的成員變數賦值
    stu1.name = "小明";
    stu1.age = 15;
    stu1.score = 92.5f;
    //呼叫類的成員函式
    stu1.say();
    return 0;
}

執行結果與上例相同。

對於熟悉 C++ 的讀者,這段程式碼並不規範,請忽略這一細節,本節的重點是引入類和物件的概念。這套 C++ 教程是在C的基礎上編寫的,我並不希望一開始就提出過多的 C++ 概念,讓讀者吃不消,我希望讀者從C逐漸過渡到 C++,從第二章開始編寫規範的 C++ 程式碼。也就是說,包括本節在內,第一章有很多不規範的 C++ 程式碼,再次請熟悉 C++ 的讀者忽略。

class 和 public 都是 C++ 中的關鍵字,初學者請先忽略 public(後續會深入講解),把注意力集中在 class 上。

C語言中的 struct 只能包含變數,而 C++ 中的 class 除了可以包含變數,還可以包含函式。display() 是用來處理成員變數的函式,在C語言中,我們將它放在了 struct Student 外面,它和成員變數是分離的;而在 C++ 中,我們將它放在了 class Student 內部,使它和成員變數聚集在一起,看起來更像一個整體。

結構體和類都可以看做一種由使用者自己定義的複雜資料型別,在C語言中可以通過結構體名來定義變數,在 C++ 中可以通過類名來定義變數。不同的是,通過結構體定義出來的變數還是叫變數,而通過類定義出來的變數有了新的名稱,叫做物件(Object)。

在第二段程式碼中,我們先通過 class 關鍵字定義了一個類 Student,然後又通過 Student 類建立了一個物件 stu1。變數和函式都是類的成員,建立物件後就可以通過點號.來使用它們。

可以將類比喻成圖紙,物件比喻成零件,圖紙說明了零件的引數(成員變數)及其承擔的任務(成員函式);一張圖紙可以生產出多個具有相同性質的零件,不同圖紙可以生產不同型別的零件。

類只是一張圖紙,起到說明的作用,不佔用記憶體空間;物件才是具體的零件,要有地方來存放,才會佔用記憶體空間。

在 C++ 中,通過類名就可以建立物件,即將圖紙生產成零件,這個過程叫做類的例項化,因此也稱物件是類的一個例項(Instance)。

有些資料也將類的成員變數稱為屬性(Property),將類的成員函式稱為方法(Method)。

2、物件導向程式設計(Object Oriented Programming,OOP)

類是一個通用的概念,C++、Java、C#、PHP 等很多程式語言中都支援類,都可以通過類建立物件。可以將類看做是結構體的升級版,C語言的晚輩們看到了C語言的不足,嘗試加以改善,繼承了結構體的思想,並進行了升級,讓程式設計師在開發或擴充套件大中型專案時更加容易。

因為 C++ 、JavaC# PHP 等語言都支援類和物件,所以使用這些語言編寫程式也被稱為物件導向程式設計,這些語言也被稱為物件導向的程式語言。C語言因為不支援類和物件的概念,被稱為程式導向的程式語言。

在C語言中,我們會把重複使用或具有某項功能的程式碼封裝成一個函式,將擁有相關功能的多個函式放在一個原始檔,再提供一個對應的標頭檔案,這就是一個模組。使用模組時,引入對應的標頭檔案就可以。

而在 C++ 中,多了一層封裝,就是類(Class)。類由一組相關聯的函式、變數組成,你可以將一個類或多個類放在一個原始檔,使用時引入對應的類就可以。下面是C和C++專案組織方式的對比:

不要小看類(Class)這一層封裝,它有很多特性,極大地方便了中大型程式的開發,它讓 C++ 成為物件導向的語言。

物件導向程式設計在程式碼執行效率上絕對沒有任何優勢,它的主要目的是方便程式設計師組織和管理程式碼,快速梳理程式設計思路,帶來程式設計思想上的革新。

物件導向程式設計是針對開發中大規模的程式而提出來的,目的是提高軟體開發的效率。不要把物件導向和麵向過程對立起來,物件導向和麵向過程不是矛盾的,而是各有用途、互為補充的。如果你希望開發一個貪吃蛇遊戲,類和物件或許是多餘的,幾個函式就可以搞定;但如果開發一款大型遊戲,那你絕對離不開物件導向。

到此這篇關於C++類和物件到底是什麼的文章就介紹到這了,更多相關C++類和物件內容請搜尋以前的文章或繼續瀏覽下面的相關文章。

相關文章