Maison  >  Article  >  développement back-end  >  Comment la surcharge de fonctions C++ atteint-elle le polymorphisme ?

Comment la surcharge de fonctions C++ atteint-elle le polymorphisme ?

PHPz
PHPzoriginal
2024-04-13 12:21:01579parcourir

La surcharge de fonctions peut être utilisée pour obtenir un polymorphisme, c'est-à-dire appeler une méthode de classe dérivée via un pointeur de classe de base, et le compilateur sélectionne la version surchargée en fonction du type de paramètre réel. Dans l'exemple, la classe Animal définit une fonction virtuelle makeSound() et les classes Dog et Cat remplacent cette fonction. Lorsque makeSound() est appelée via le pointeur Animal*, le compilateur appellera la version remplacée correspondante en fonction de l'objet pointé. type, réalisant ainsi le polymorphisme sexuel.

C++ 函数重载如何实现多态性?

Comment la surcharge de fonctions C++ atteint-elle le polymorphisme

Qu'est-ce que la surcharge de fonctions ?

La surcharge de fonctions est une technique de programmation qui définit plusieurs fonctions avec le même nom mais différents types de paramètres ou numéros dans la même portée.

Comment utiliser la surcharge de fonctions pour réaliser le polymorphisme ?

Le polymorphisme est une fonctionnalité qui permet d'appeler des méthodes de classe dérivées via un pointeur ou une référence de classe de base. La relation entre la surcharge de fonctions et le polymorphisme en C++ est la suivante :

  • La surcharge de fonctions permet la création de plusieurs versions d'une fonction avec le même nom mais des signatures différentes (types de paramètres ou numéro).
  • Lorsqu'une méthode de classe dérivée est appelée via un pointeur ou une référence de classe de base, le compilateur choisit la version surchargée à appeler en fonction du type du paramètre réel.

Exemple pratique

Le code suivant montre comment utiliser la surcharge de fonctions pour obtenir le polymorphisme :

#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;
}

Sortie :

Woof woof
Meow meow

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn