虛擬函數允許在衍生類別中覆寫基底類別函數,在執行時間根據物件類型呼叫適當函數:建立虛擬函數:基底類別中使用 virtual 關鍵字聲明函數。覆寫虛擬函數:在衍生類別中使用 override 關鍵字覆蓋基底類別虛擬函數。實戰呼叫:透過基底類別指標或引用指向派生類別物件時,將呼叫覆蓋版本。未覆蓋虛擬函數:如果沒有覆蓋,將呼叫基底類別原始實作。使用指標或參考呼叫:實現多態性,允許基底類別的指標或引用指向派生類別對象,並在運行時呼叫適當的覆蓋函數。
虛擬函數是C 中一種多態性機制。它允許基底類別中的函數在衍生類別中被覆蓋,允許在運行時根據物件的實際類型呼叫適當的函數。
要建立虛擬函數,需要在基底類別中使用virtual
關鍵字聲明函數,如下所示:
class Base { public: virtual void print() { cout << "Base class" << endl; } };
在衍生類別中,可以使用override
關鍵字覆寫基底類別中的虛擬函數,如下所示:
class Derived : public Base { public: override void print() { cout << "Derived class" << endl; } };
考慮以下一個簡單的範例:
#include <iostream> using namespace std; class Animal { public: virtual void speak() { cout << "Animal speaks" << endl; } }; class Dog : public Animal { public: override void speak() { cout << "Dog barks" << endl; } }; int main() { Animal* a = new Dog(); a->speak(); // 输出:Dog barks return 0; }
在這個範例中,基底類別Animal
定義了speak()
虛擬函數,它在Dog
衍生類別中被覆寫。當我們透過 Animal*
指標呼叫 speak()
函數時,將呼叫覆蓋版本,輸出 "Dog barks"。
問:為什麼需要使用指標或參考來呼叫虛擬函數?
答案:為了實現多態性,基底類別的指標或參考可以指向衍生類別的對象,允許在運行時呼叫適當的覆蓋函數。
問:如果在衍生類別中沒有覆寫虛擬函數會怎麼樣?
答案:在這種情況下,將呼叫基底類別中的原始實作。
以上是C++ 虛擬函數實戰應用:程式碼範例與解疑的詳細內容。更多資訊請關注PHP中文網其他相關文章!