Maison > développement back-end > C++ > Comment le découpage affecte-t-il le comportement polymorphe en C ?

Comment le découpage affecte-t-il le comportement polymorphe en C ?

Barbara Streisand
Libérer: 2024-12-04 02:14:14
original
656 Les gens l'ont consulté

How Does Slicing Affect Polymorphic Behavior in C  ?

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();
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal