Maison >développement back-end >C++ >Explorer le polymorphisme en C++

Explorer le polymorphisme en C++

WBOY
WBOYoriginal
2023-08-21 22:21:231377parcourir

C++ est un langage qui prend en charge la programmation orientée objet, et une caractéristique majeure de la programmation orientée objet est le polymorphisme. Le polymorphisme fait référence aux différents comportements produits par différents objets lors de l'exécution de la même opération. En C++, le polymorphisme est obtenu grâce à la surcharge de fonctions et à l'utilisation de fonctions virtuelles. Ce qui suit explorera le polymorphisme en C++ pour aider les lecteurs à mieux comprendre ce concept.

1. Surcharge de fonctions

La surcharge de fonctions signifie que plusieurs fonctions portant le même nom sont définies dans la même portée, mais leurs types de paramètres, leur nombre de paramètres ou leurs types de valeurs de retour sont différents. De cette façon, lorsque la fonction est appelée, le compilateur choisira automatiquement d'appeler la fonction correspondante en fonction des paramètres passés. Par exemple :

void print(int a){
    cout<<"int: "<<a<<endl;
}

void print(double b){
    cout<<"double: "<<b<<endl;
}

int main(){
    print(10); //调用print(int a)函数
    print(3.14); //调用print(double b)函数
    return 0;
}

La fonction print est surchargée et définie respectivement pour les paramètres de type int et de type double. Lorsque la fonction print est appelée dans la fonction principale, le compilateur sélectionne la fonction correspondante à appeler en fonction du type de paramètres passés. Ceci est un exemple de polymorphisme obtenu grâce à une surcharge de fonctions.

2. Fonction virtuelle

Les fonctions virtuelles sont des fonctions définies dans la classe parent, qui peuvent être remplacées par des sous-classes. Définissez la fonction comme type virtuel dans la classe de base. Lorsque la sous-classe hérite de la fonction, elle doit également être définie comme fonction virtuelle. Le nom et les paramètres de la fonction doivent être exactement les mêmes. Au moment de l'exécution, les fonctions virtuelles sont liées dynamiquement en fonction du type d'objet en cours d'exécution pour obtenir le polymorphisme. Par exemple :

class Shape{
public:
    virtual void area(){ //定义虚函数area
        cout<<"This is a shape"<<endl;
    }
};

class Circle:public Shape{
public:
    void area(){//重写虚函数area
        cout<<"This is a circle"<<endl;
    }
};

class Rectangle:public Shape{
public:
    void area(){//重写虚函数area
        cout<<"This is a rectangle"<<endl;
    }
};

int main(){
    Shape *shape;
    Circle circle;
    Rectangle rectangle;
    shape = &circle;
    shape->area();//调用circle类中的虚函数area
    shape = &rectangle;
    shape->area();//调用rectangle类中的虚函数area
    return 0;
}

Dans le code ci-dessus, une classe Shape est définie, qui contient une zone de fonctions virtuelle. Les classes Circle et Rectangle héritent de la classe Shape et y réécrivent la zone de fonction virtuelle. Dans la fonction principale, un pointeur vers le type Shape est défini, attribué aux adresses de l'objet Circle et de l'objet Rectangle, et les fonctions de zone sont appelées respectivement. Étant donné que la fonction de zone est une fonction virtuelle et est liée dynamiquement en fonction du type d'objet en cours d'exécution, les résultats de sortie sont respectivement "Ceci est un cercle" et "Ceci est un rectangle". Ceci est un exemple de fonctions virtuelles implémentant le polymorphisme.

3. Fonction virtuelle pure

Une fonction virtuelle pure signifie que le corps de la fonction virtuelle est vide et que les sous-classes doivent réécrire la fonction pour hériter de la classe. Lorsqu’il existe des fonctions virtuelles pures dans une classe de base, la classe est appelée classe abstraite. Par exemple :

class Shape{
public:
    virtual void area() = 0;//定义纯虚函数area
};

class Circle:public Shape{
public:
    void area(){
        cout<<"This is a circle"<<endl;
    }
};

class Rectangle:public Shape{
public:
    void area(){
        cout<<"This is a rectangle"<<endl;
    }
};

int main(){
    Shape *shape;
    Circle circle;
    Rectangle rectangle;
    shape = &circle;
    shape->area();//调用circle类中的虚函数area
    shape = &rectangle;
    shape->area();//调用rectangle类中的虚函数area
    return 0;
}

Dans le code ci-dessus, la zone de fonction virtuelle pure est définie dans la classe Shape. Les classes Circle et Rectangle doivent hériter de cette fonction pour hériter de la classe Shape, sinon une erreur de compilation sera signalée. Dans la fonction principale, le polymorphisme est obtenu en pointant des pointeurs vers des objets Cercle et Rectangle.

Résumé :

On peut voir qu'il existe de nombreuses façons d'implémenter le polymorphisme en C++, parmi lesquelles la surcharge de fonctions et les fonctions virtuelles sont les deux méthodes les plus couramment utilisées. En implémentant le polymorphisme, la flexibilité et la réutilisabilité du code peuvent être considérablement améliorées, et le code est également plus facile à lire et à maintenir. Dans la programmation réelle, vous devez vous concentrer sur la compréhension de la nature et des utilisations du polymorphisme, et maîtriser les méthodes et techniques d'utilisation du polymorphisme, afin de renforcer vos capacités de programmation.

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