Comprendre le polymorphisme et le découpage en C
Le polymorphisme, concept fondamental de la programmation orientée objet, permet de traiter des objets de différents types comme objets d'un type commun. Cependant, en C , ce concept peut s'accompagner d'un phénomène involontaire appelé découpage.
L'extrait de code donné montre un exemple de polymorphisme et de découpage :
#include <iostream> using namespace std; class Animal { public: virtual void makeSound() { cout << "rawr" << endl; } }; class Dog : public Animal { public: virtual void makeSound() { cout << "bark" << endl; } }; int main() { Animal animal; animal.makeSound(); Dog dog; dog.makeSound(); Animal badDog = Dog(); badDog.makeSound(); Animal* goodDog = new Dog(); goodDog->makeSound(); }
Une fois exécuté, ce code étonnamment, il produit "rawr", "bark", "rawr" et "bark". C'est à cause du découpage. Lorsque "badDog" est initialisé avec un objet "Dog", seule la partie "Animal" de l'objet "Dog" est copiée dans "badDog". Par conséquent, "badDog" reste un "Animal" et ne peut pas accéder au comportement "Dog".
En C, contrairement aux langages tels que Java ou C# où la copie basée sur les valeurs initialise les références, la sémantique des valeurs s'applique. La copie d'un objet de classe crée une copie distincte de l'objet avec sa propre mémoire allouée, conduisant à un découpage. Pour obtenir un comportement polymorphe, des pointeurs ou des références doivent être utilisés en C au lieu d'attribuer directement un type d'objet à un autre.
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!