Heim > Backend-Entwicklung > C++ > Wie wirkt sich Slicing auf den Polymorphismus in C aus?

Wie wirkt sich Slicing auf den Polymorphismus in C aus?

Linda Hamilton
Freigeben: 2024-11-30 21:51:19
Original
472 Leute haben es durchsucht

How Does Slicing Affect Polymorphism in C  ?

Polymorphismus und Slicing in C

In C können Sie mit Polymorphismus Objekte mit unterschiedlicher Funktionalität basierend auf ihrer abgeleiteten Klasse erstellen. Allerdings kann es bei unsachgemäßer Handhabung zu seltsamem Verhalten kommen. Ein solches Problem ist das „Slicing“.

Bedenken Sie den folgenden Code:

#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();
}
Nach dem Login kopieren

Die Ausgabe, die Sie erhalten, ist:

rawr
bark
rawr
bark
Nach dem Login kopieren

Sie können erwarten, dass die Ausgabe so ist „rawr bark bark bark“, aber stattdessen verhält sich das Objekt badDog wie ein Tier und nicht wie ein Hund. Dies liegt am Slicing.

Wenn Sie badDog als Animal badDog = Dog() erstellen, schneiden Sie das Dog-Objekt in ein Animal. Das bedeutet, dass badDog nur die Teile von Dog enthält, die Teil der Animal-Klasse sind, und die gesamte spezifische Dog-Funktionalität verloren geht.

Um dies zu beheben, müssen Sie Zeiger oder Referenzen verwenden, um Klassen abzuleiten. Zeiger oder Referenzen kopieren das Objekt nicht, sodass sie ihre spezifische Funktionalität beibehalten können. Beispielsweise behält der goodDog-Zeiger seine Dog-Funktionalität erfolgreich bei.

Einige Sprachen wie Java verfügen standardmäßig über Referenzsemantik, während C Wertesemantik verwendet. In C müssen Sie explizit Zeiger oder Referenzen verwenden, um eine Referenzsemantik zu erreichen. Andernfalls kann es zu Slicing-Problemen kommen, wie im badDog-Beispiel gezeigt.

Das obige ist der detaillierte Inhalt vonWie wirkt sich Slicing auf den Polymorphismus in C aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage