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

Bagaimanakah Menghiris Mempengaruhi Polimorfisme dalam C?

Linda Hamilton
Lepaskan: 2024-11-30 21:51:19
asal
470 orang telah melayarinya

How Does Slicing Affect Polymorphism in C  ?

Polimorfisme dan Penghirisan dalam C

Dalam C , polimorfisme membolehkan anda mencipta objek dengan fungsi berbeza berdasarkan kelas terbitannya. Walau bagaimanapun, ia boleh membawa kepada tingkah laku aneh jika tidak dikendalikan dengan berhati-hati. Salah satu isu tersebut ialah "menghiris."

Pertimbangkan kod berikut:

#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();
}
Salin selepas log masuk

Output yang anda dapat ialah:

rawr
bark
rawr
bark
Salin selepas log masuk

Anda mungkin menjangkakan outputnya ialah "kulit kayu mentah kulit kayu", tetapi sebaliknya, objek badDog berkelakuan sebagai Haiwan dan bukannya Anjing. Ini kerana menghiris.

Apabila anda mencipta badDog sebagai Animal badDog = Dog(), anda sedang menghiris objek Dog menjadi Haiwan. Ini bermakna badDog hanya mengandungi bahagian Anjing yang merupakan sebahagian daripada kelas Haiwan dan semua fungsi Anjing tertentu hilang.

Untuk membetulkannya, anda perlu menggunakan penunjuk atau rujukan untuk memperoleh kelas. Penunjuk atau rujukan tidak menyalin objek, jadi mereka boleh mengekalkan fungsi khusus mereka. Contohnya, penunjuk goodDog berjaya mengekalkan fungsi Dognya.

Sesetengah bahasa seperti Java mempunyai semantik rujukan secara lalai, manakala C menggunakan semantik nilai. Dalam C , anda secara eksplisit perlu menggunakan penunjuk atau rujukan untuk mencapai semantik rujukan. Kegagalan berbuat demikian boleh membawa kepada isu penghirisan, seperti yang ditunjukkan dalam contoh badDog.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan