首頁 >後端開發 >C++ >探究C++的多態性

探究C++的多態性

WBOY
WBOY原創
2023-08-21 22:21:231381瀏覽

C 是一門支援物件導向程式設計的語言,而物件導向程式設計的一大特點就是多態性。多態是指不同物件在進行相同操作時所產生的不同行為。在C 中,透過函數的重載和虛函數的使用來實現多態性。以下將探究C 的多態性,幫助讀者更能掌握此概念。

1.函數的重載

函數的重載是指在相同作用域中定義了多個同名函數,但它們的參數型別、參數個數或傳回值型別不同。這樣當函數呼叫時,根據傳遞的參數不同,編譯器會自動選擇呼叫對應的函數。例如:

void print(int a){
    cout<<"int: "<<a<<endl;
}

void print(double b){
    cout<<"double: "<<b<<endl;
}

int main(){
    print(10); //调用print(int a)函数
    print(3.14); //调用print(double b)函数
    return 0;
}

函數print被重載,分別針對int型和double型參數進行了定義。在main函數中呼叫print函數時,編譯器會根據傳遞的參數類型選擇對應函數進行呼叫。這就是函數的重載實現多態性的例子。

2.虛函數

虛函數是定義在父類別中的函數,子類別可以對其進行重寫。在基底類別中將函數定義為virtual類型,子類別繼承函數時也需要將其定義為虛擬函數,函數名稱和參數必須完全一致。在運行時,根據實際運行的物件類型來動態綁定虛函數實現多態性。例如:

class Shape{
public:
    virtual void area(){ //定义虚函数area
        cout<<"This is a shape"<<endl;
    }
};

class Circle:public Shape{
public:
    void area(){//重写虚函数area
        cout<<"This is a circle"<<endl;
    }
};

class Rectangle:public Shape{
public:
    void area(){//重写虚函数area
        cout<<"This is a rectangle"<<endl;
    }
};

int main(){
    Shape *shape;
    Circle circle;
    Rectangle rectangle;
    shape = &circle;
    shape->area();//调用circle类中的虚函数area
    shape = &rectangle;
    shape->area();//调用rectangle类中的虚函数area
    return 0;
}

在上述程式碼中,定義了一個Shape類,其中含有虛函數area。 Circle和Rectangle兩個類別繼承了Shape類,並對其中的虛函數area進行了重寫。在main函數中,定義了一個指向Shape類型的指針,分別將其賦值為Circle物件和Rectangle物件的位址,並分別呼叫area函數。由於area函數是虛函數,根據實際運行的物件類型來動態綁定,因此輸出的結果分別為「This is a circle」和「This is a rectangle」。這就是虛函數實現多態性的例子。

3.純虛函數

純虛函數是指虛函數的函數體為空,子類別必須重寫函數以繼承該類別。當基底類別中存在純虛函數時,該類別稱為抽象類別。例如:

class Shape{
public:
    virtual void area() = 0;//定义纯虚函数area
};

class Circle:public Shape{
public:
    void area(){
        cout<<"This is a circle"<<endl;
    }
};

class Rectangle:public Shape{
public:
    void area(){
        cout<<"This is a rectangle"<<endl;
    }
};

int main(){
    Shape *shape;
    Circle circle;
    Rectangle rectangle;
    shape = &circle;
    shape->area();//调用circle类中的虚函数area
    shape = &rectangle;
    shape->area();//调用rectangle类中的虚函数area
    return 0;
}

在上述程式碼中,Shape類別中定義了純虛函數area,Circle和Rectangle兩個類別必須繼承該函數以繼承Shape類,否則會編譯報錯。在main函數中,透過將指標指向Circle和Rectangle物件來實現多態性。

總結:

可以看出,C 中實作多態性有很多種方法,其中函數的重載和虛函數是最常用的兩種方式。透過實現多態性,可以大大提高程式碼的靈活性和復用性,也更易於閱讀和維護程式碼。在實際程式設計中,應著重於理解多態性的本質和用途,並掌握多態性的使用方法和技巧,以此強化自己的程式設計能力。

以上是探究C++的多態性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn