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