虛擬函數和繼承在物件導向程式設計中實現多態性:聲明虛擬函數允許衍生類別重寫基底類別方法,並根據物件的執行時間類型呼叫。繼承建立類別層次,衍生類別可存取和擴展基底類別資料和方法。多型繼承允許衍生類別從多個基底類別繼承,最衍生的物件可用所有基底類別的虛擬函數。虛擬函數的呼叫順序取決於類別的聲明順序。
在物件導向程式設計中,虛擬函數和繼承是多態性的關鍵要素。虛擬函數允許衍生類別重寫基底類別的方法,並在運行時呼叫正確的實作。繼承建立了類別之間的層次關係,使衍生類別可以存取和擴展基底類別中的資料和方法。本文將深入探討 C 中虛擬函數和繼承的機制,並透過實戰案例進行說明。
虛擬函數是一種成員函數,它被宣告為 virtual
。當從衍生類別呼叫虛擬函數時,將根據物件的實際執行時間類型呼叫該函數的正確實作。
宣告虛擬函數:
class Base { public: virtual void display() { cout << "Base class display" << endl; } };
重寫衍生類別中的虛擬函數:
class Derived : public Base { public: virtual void display() { // 重写 display 方法 cout << "Derived class display" << endl; } };
繼承允許衍生類別從基底類別繼承資料和方法。
繼承語法:
class Derived : public Base { // 派生类声明 };
衍生類別可以存取和使用基底類別中的所有非私有成員,包括虛擬函數。它也可以在衍生類別中重寫基底類別的虛擬函數。
多型繼承:當一個衍生類別從多個基底類別繼承時。
在多態繼承中,最衍生類別的物件可以存取和使用所有基底類別的虛擬函數。跨多個繼承層次呼叫的順序取決於類別的聲明順序。
實戰案例:
考慮以下程式碼,展示了多態繼承的使用:
#include <iostream> using namespace std; class Shape { public: virtual void draw() { cout << "Drawing shape" << endl; } }; class Circle : public Shape { public: virtual void draw() { cout << "Drawing circle" << endl; } }; class Square : public Shape { public: virtual void draw() { cout << "Drawing square" << endl; } }; int main() { Shape* shapes[] = { new Circle(), new Square() }; for (Shape* shape : shapes) { shape->draw(); } return 0; }
輸出:
Drawing circle Drawing square
在這個例子中,Circle
和Square
類別從基底類別Shape
繼承了draw
虛擬函數。當呼叫 draw
函數時,它會根據實際物件的類型呼叫對應的實作。這演示了多態繼承如何允許衍生類別重寫從基底類別繼承的虛擬函數,並在運行時提供特定於物件的正確實作。
以上是C++ 虛擬函式與繼承:理解多型繼承中的奧秘的詳細內容。更多資訊請關注PHP中文網其他相關文章!