C++之類(Class),對象(Object)以及實例(Instance)的關系


面向對象最重要的概念就是類(Class)和實例(Instance),必須牢記類是抽象的模板,而實例是根據類創建出來的一個個具體的“對象”。

從其定義來看,對象是指一個能完成特定操作,具有特定屬性的實體(Component);類是具有相同屬性對象的集合(Group of Objects)。實例則往往被理解為一個對象的具體化。

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

例如C語言結構體:

#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;
}

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

例如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;
}

上面兩個程序運行結果相同。

class 和 public 都是C++中的關鍵字

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

結構體和類都可以看做一種由用戶自己定義的復雜數據類型,在C語言中可以通過結構體名來定義變量,在C++中可以通過類名來定義變量。不同的是,通過結構體定義出來的變量還是叫變量,而通過類定義出來的變量有了新的名稱,叫做對象(Object)。

在第二段代碼中,我們先通過 class 關鍵字定義了一個類 Student,然后又通過 Student 類創建了一個對象 stu1。變量和函數都是類的成員,創建對象后就可以通過點號.來使用它們。

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

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

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

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

在C語言中,我們會把重復使用或具有某項功能的代碼封裝成一個函數,將擁有相關功能的多個函數放在一個源文件,再提供一個對應的頭文件,這就是一個模塊。使用模塊時,引入對應的頭文件就可以。

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

                                          圖1:C語言中項目的組織方式

                                    圖2:C++語言中項目的組織方式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM