函數重載可用于實現多態性,即通過基類指針調用派生類方法,編譯器根據實際參數類型選擇重載版本。示例中,animal 類定義虛擬 makesound() 函數,dog 和 cat 類重寫該函數,通過 animal* 指針調用 makesound() 時,編譯器會基于指向的對象類型調用相應的重寫版本,從而實現多態性。
C++ 函數重載如何實現多態性
什么是函數重載?
函數重載是一種將多個具有相同名稱但參數類型或數量不同的函數定義于同一作用域內的編程技術。
如何使用函數重載實現多態性?
多態性是一種允許通過基類指針或引用調用派生類方法的功能。C++ 中函數重載與多態性的關系如下:
函數重載允許為具有相同名稱但不同簽名(參數類型或數量)的函數創建多個版本。
當通過基類指針或引用調用派生類方法時,編譯器會根據實際參數的類型選擇要調用的重載版本。
實戰示例
以下代碼展示了如何使用函數重載實現多態性:
#include <iostream> class Animal { public: virtual void makeSound() { // 聲明為虛函數 std::cout << "Animal sound" << std::endl; } }; class Dog : public Animal { public: void makeSound() override { // 重寫 makeSound() std::cout << "Woof woof" << std::endl; } }; class Cat : public Animal { public: void makeSound() override { // 重寫 makeSound() std::cout << "Meow meow" << std::endl; } }; int main() { Animal* animalptr; // 基類指針 // 指向 Dog 對象 animalptr = new Dog(); animalptr->makeSound(); // 調用 Dog::makeSound() // 指向 Cat 對象 animalptr = new Cat(); animalptr->makeSound(); // 調用 Cat::makeSound() delete animalptr; return 0; }
登錄后復制
輸出:
Woof woof Meow meow
登錄后復制