Rumah > Artikel > pembangunan bahagian belakang > Pelaksanaan polimorfisme C++ dan penyelesaian kepada masalah biasa
Pelaksanaan polimorfisme C++ dan penyelesaian kepada masalah biasa
Pengenalan:
Dalam pengaturcaraan C++, polimorfisme ialah konsep dan ciri penting. Ia membolehkan kami menggunakan penunjuk atau rujukan kelas asas untuk mengendalikan objek kelas terbitan, dengan itu mencapai fleksibiliti program dan kebolehgunaan semula. Artikel ini akan memperkenalkan cara polimorfisme dilaksanakan dalam C++ dan membincangkan beberapa masalah polimorfisme biasa dan penyelesaiannya. Sementara itu, untuk pemahaman yang lebih baik, kami akan memberikan contoh kod konkrit.
1. Cara melaksanakan polimorfisme
Pelaksanaan polimorfisme dalam C++ bergantung terutamanya pada mekanisme pewarisan dan fungsi maya. Mari kita ambil haiwan sebagai contoh untuk memperkenalkan senario polimorfisme biasa:
#include <iostream> using namespace std; class Animal { public: virtual void sound() { cout << "Animal makes sound." << endl; } }; class Dog : public Animal { void sound() override { cout << "Dog barks." << endl; } }; class Cat : public Animal { void sound() override { cout << "Cat meows." << endl; } }; int main() { Animal* animal1 = new Dog(); animal1->sound(); Animal* animal2 = new Cat(); animal2->sound(); delete animal1; delete animal2; return 0; }
Dalam kod di atas, kami mentakrifkan kelas asas Haiwan, dan dua kelas terbitannya Anjing dan Kucing. Kaedah sound() dalam kelas asas Animal diisytiharkan sebagai fungsi maya, dan kaedah yang sepadan dalam kelas terbitannya ditandakan dengan kata kunci "override".
Dalam fungsi utama, kami menunjuk kepada objek kelas terbitan Dog dan Cat melalui penunjuk kelas asas animal1 dan animal2 masing-masing, dan mencapai polimorfisme dengan memanggil kaedah sound(). Bergantung pada jenis kelas terbitan tertentu, atur cara akan memanggil kaedah bunyi() secara dinamik dalam kelas terbitan yang sepadan untuk menghasilkan output yang berbeza. . Ini kerana kaedah sound() diisytiharkan sebagai fungsi maya, sekali gus mencapai pengikatan dinamik. Polimorfisme tidak boleh dicapai tanpa mengisytiharkan kaedah sound() sebagai fungsi maya.
Masalah liputan fungsi maya dalam terbitan berbilang peringkat:class Animal { public: virtual void sound() { cout << "Animal makes sound." << endl; } }; class Dog : public Animal { void sound() override { cout << "Dog barks." << endl; } }; class Cat : public Dog { void sound() override { cout << "Cat meows." << endl; } }; int main() { Animal* animal = new Cat(); animal->sound(); // 输出 "Cat meows." delete animal; return 0; }
Dalam kod di atas, kelas terbitan Cat mewarisi Anjing, dan Anjing mewarisi Haiwan. Penggantian kaedah sound() dalam Cat ditandakan dengan kata kunci "override" untuk menunjukkan dengan jelas bahawa kaedah tersebut adalah penggantian yang betul bagi fungsi maya dalam kelas asas. Pengkompil akan mengeluarkan amaran jika kata kunci "override" diabaikan.
Apabila menggunakan polimorfisme, pemusnah kelas asas mesti diisytiharkan sebagai pemusnah maya. Dengan cara ini, apabila memadamkan objek kelas terbitan, pemusnah kelas terbitan akan dipanggil secara automatik untuk mengelakkan kebocoran memori.
class Animal { public: virtual ~Animal() { cout << "Animal destructor called." << endl; } }; class Dog : public Animal { public: ~Dog() override { cout << "Dog destructor called." << endl; } }; int main() { Animal* animal = new Dog(); delete animal; // 输出 "Dog destructor called." return 0; }
Dalam kod di atas, pemusnah kelas asas Haiwan diisytiharkan sebagai pemusnah maya. Apabila kita memadam objek kelas terbitan melalui penuding kelas asas, pemusnah kelas terbitan akan dipanggil dengan betul untuk memusnahkan objek kelas terbitan.
Atas ialah kandungan terperinci Pelaksanaan polimorfisme C++ dan penyelesaian kepada masalah biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!