Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Menghiris Mempengaruhi Gelagat Polimorfik dalam C ?

Bagaimanakah Menghiris Mempengaruhi Gelagat Polimorfik dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-12-04 02:14:14656semak imbas

How Does Slicing Affect Polymorphic Behavior in C  ?

Memahami Polimorfisme dan Menghiris dalam C

Polymorphism, konsep asas dalam pengaturcaraan berorientasikan objek, membenarkan objek daripada jenis yang berbeza untuk dianggap sebagai objek daripada jenis biasa. Walau bagaimanapun, dalam C , konsep ini boleh disertai dengan fenomena yang tidak diingini dikenali sebagai penghirisan.

Coretan kod yang diberikan menunjukkan contoh polimorfisme dan penghirisan:

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

Apabila dilaksanakan, kod ini secara mengejutkan mengeluarkan "rawr", "bark", "rawr", dan "bark". Ini kerana menghiris. Apabila "badDog" dimulakan dengan objek "Anjing", hanya bahagian "Haiwan" objek "Anjing" disalin ke "badDog." Oleh itu, "badDog" kekal sebagai "Haiwan" dan tidak boleh mengakses gelagat "Anjing".

Dalam C , tidak seperti bahasa seperti Java atau C# di mana penyalinan berasaskan nilai memulakan rujukan, semantik nilai digunakan. Menyalin objek kelas mencipta salinan objek yang berasingan dengan memori yang diperuntukkan sendiri, yang membawa kepada penghirisan. Untuk mencapai gelagat polimorfik, penunjuk atau rujukan harus digunakan dalam C dan bukannya memberikan secara langsung satu jenis objek kepada yang lain.

Atas ialah kandungan terperinci Bagaimanakah Menghiris Mempengaruhi Gelagat Polimorfik dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn