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中文網其他相關文章!