


Fungsi maya dan pengikatan dinamik dalam fungsi C++ membebankan dan menulis semula
Melebihi beban dan menulis semula fungsi: Melebihkan fungsi membenarkan penciptaan fungsi dengan nama yang sama dengan senarai parameter berbeza dalam kelas yang sama, manakala mengatasi fungsi adalah untuk mengatasi fungsi nama yang sama kelas asas dengan subkelas dalam perhubungan warisan. Fungsi maya dan pengikatan dinamik: Fungsi maya membenarkan subkelas melaksanakan kaedah kelas induk dengan cara mereka sendiri dan mengisytiharkannya dengan kata kunci maya dalam tandatangan fungsi. Pengikatan dinamik menentukan pelaksanaan fungsi yang dipanggil semasa runtime, dan ia berlaku apabila penunjuk kelas induk menunjuk ke objek kelas anak. Dalam kes mengatasi, walaupun fungsi maya dipanggil melalui penunjuk kelas induk, pelaksanaan subkelas juga akan dipanggil, yang mencerminkan kelebihan pengikatan dinamik.
Fungsi berlebihan dan penulisan semula dalam C++: peranan fungsi maya dan pengikatan dinamik
Dalam C++, lebihan beban dan penulisan semula fungsi ialah dua konsep utama yang boleh mencapai skalabiliti dan fleksibiliti kod. Perbezaan di antara mereka ialah:
- Fungsi berlebihan: Dalam kelas yang sama, fungsi dengan senarai parameter berbeza mempunyai nama yang sama.
- Peningkatan Fungsi: Dalam perhubungan warisan, fungsi dalam subkelas mengatasi fungsi dalam kelas asas dengan nama dan senarai parameter yang sama.
Fungsi maya dan pengikatan dinamik memainkan peranan penting dalam penulisan semula fungsi.
Fungsi maya
Fungsi maya ialah fungsi khas yang membenarkan subkelas melaksanakan kaedah kelas induk dengan cara yang berbeza. Ia diisytiharkan dengan menyatakan kata kunci virtual
dalam tandatangan fungsi. Contohnya: virtual
关键字来声明。例如:
class Base { public: virtual void print() { cout << "Base class print" << endl; } };
动态绑定
动态绑定是在运行时确定调用哪个函数实现版本的过程。当父类指针指向子类对象时,就会发生动态绑定。例如:
Base* basePtr = new Derived(); // 指向 Derived 对象的 Base 指针 basePtr->print(); // 调用 Derived::print()
在重写的情况下,子类对虚函数的实现将被调用,即使通过父类指针进行调用,这是动态绑定的优点之一。
实战案例
考虑以下代码,它展示了函数重写和虚函数如何在实际场景中协同工作:
class Animal { public: virtual string speak() { return "Default animal sound"; } }; class Dog : public Animal { public: virtual string speak() override { return "Woof"; } }; class Cat : public Animal { public: virtual string speak() override { return "Meow"; } }; int main() { Animal* animalPtr; // 声明父类指针 // 分别创建 Dog 和 Cat 对象并将其分配给 animalPtr animalPtr = new Dog(); cout << animalPtr->speak() << endl; // 输出 "Woof" animalPtr = new Cat(); cout << animalPtr->speak() << endl; // 输出 "Meow" return 0; }
在这个例子中,Animal
类包含一个虚函数 speak()
,它被子类 Dog
和 Cat
重写。当 animalPtr
指向不同的子类对象时,调用 speak()
rrreee
Dynamic Binding
🎜🎜Dynamic binding ialah proses menentukan pada masa jalan versi pelaksanaan fungsi yang hendak dipanggil. Pengikatan dinamik berlaku apabila penunjuk kelas induk menunjuk ke objek kelas kanak-kanak. Contohnya: 🎜rrreee🎜Dalam kes overriding, pelaksanaan subkelas bagi fungsi maya akan dipanggil, walaupun ia dipanggil melalui penunjuk kelas induk, yang merupakan salah satu kelebihan pengikatan dinamik. 🎜🎜🎜Contoh Praktikal🎜🎜🎜Pertimbangkan kod berikut, yang menunjukkan cara mengatasi fungsi dan fungsi maya berfungsi bersama dalam senario dunia sebenar: 🎜rrreee🎜Dalam contoh ini, kelasAnimal
mengandungi maya fungsi speak()
, yang ditindih oleh subkelas Dog
dan Cat
. Apabila animalPtr
menghala ke objek subkelas yang berbeza, memanggil speak()
akan mengikat secara dinamik mengikut jenis objek sebenar, dengan itu mengeluarkan bunyi yang berbeza. 🎜🎜Dengan menggunakan fungsi maya dan pengikatan dinamik, kami boleh menulis kod yang fleksibel dan boleh diperluas, serta boleh memilih pelaksanaan fungsi yang berbeza mengikut jenis objek semasa masa jalan. 🎜Atas ialah kandungan terperinci Fungsi maya dan pengikatan dinamik dalam fungsi C++ membebankan dan menulis semula. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Langkah-langkah untuk melaksanakan corak strategi dalam C++ adalah seperti berikut: tentukan antara muka strategi dan isytiharkan kaedah yang perlu dilaksanakan. Buat kelas strategi khusus, laksanakan antara muka masing-masing dan sediakan algoritma yang berbeza. Gunakan kelas konteks untuk memegang rujukan kepada kelas strategi konkrit dan melaksanakan operasi melaluinya.

Pengendalian pengecualian bersarang dilaksanakan dalam C++ melalui blok try-catch bersarang, membenarkan pengecualian baharu dibangkitkan dalam pengendali pengecualian. Langkah-langkah cuba-tangkap bersarang adalah seperti berikut: 1. Blok cuba-tangkap luar mengendalikan semua pengecualian, termasuk yang dilemparkan oleh pengendali pengecualian dalam. 2. Blok cuba-tangkap dalam mengendalikan jenis pengecualian tertentu, dan jika pengecualian luar skop berlaku, kawalan diberikan kepada pengendali pengecualian luaran.

Warisan templat C++ membenarkan kelas terbitan templat menggunakan semula kod dan kefungsian templat kelas asas, yang sesuai untuk mencipta kelas dengan logik teras yang sama tetapi gelagat khusus yang berbeza. Sintaks warisan templat ialah: templateclassDerived:publicBase{}. Contoh: templateclassBase{};templateclassDerived:publicBase{};. Kes praktikal: Mencipta kelas terbitan Derived, mewarisi fungsi mengira Base kelas asas, dan menambah kaedah printCount untuk mencetak kiraan semasa.

Punca dan penyelesaian untuk kesilapan Apabila menggunakan PECL untuk memasang sambungan dalam persekitaran Docker Apabila menggunakan persekitaran Docker, kami sering menemui beberapa sakit kepala ...

Dalam C, jenis char digunakan dalam rentetan: 1. Simpan satu watak; 2. Gunakan array untuk mewakili rentetan dan berakhir dengan terminator null; 3. Beroperasi melalui fungsi operasi rentetan; 4. Baca atau output rentetan dari papan kekunci.

Dalam C++ berbilang benang, pengendalian pengecualian dilaksanakan melalui mekanisme std::promise dan std::future: gunakan objek promise untuk merekodkan pengecualian dalam utas yang membuang pengecualian. Gunakan objek masa hadapan untuk menyemak pengecualian dalam urutan yang menerima pengecualian. Kes praktikal menunjukkan cara menggunakan janji dan niaga hadapan untuk menangkap dan mengendalikan pengecualian dalam urutan yang berbeza.

Multithreading dalam bahasa dapat meningkatkan kecekapan program. Terdapat empat cara utama untuk melaksanakan multithreading dalam bahasa C: Buat proses bebas: Buat pelbagai proses berjalan secara bebas, setiap proses mempunyai ruang ingatan sendiri. Pseudo-Multithreading: Buat pelbagai aliran pelaksanaan dalam proses yang berkongsi ruang memori yang sama dan laksanakan secara bergantian. Perpustakaan multi-threaded: Gunakan perpustakaan berbilang threaded seperti PTHREADS untuk membuat dan mengurus benang, menyediakan fungsi operasi benang yang kaya. Coroutine: Pelaksanaan pelbagai threaded ringan yang membahagikan tugas menjadi subtask kecil dan melaksanakannya pada gilirannya.

Pengiraan C35 pada dasarnya adalah matematik gabungan, yang mewakili bilangan kombinasi yang dipilih dari 3 dari 5 elemen. Formula pengiraan ialah C53 = 5! / (3! * 2!), Yang boleh dikira secara langsung oleh gelung untuk meningkatkan kecekapan dan mengelakkan limpahan. Di samping itu, memahami sifat kombinasi dan menguasai kaedah pengiraan yang cekap adalah penting untuk menyelesaikan banyak masalah dalam bidang statistik kebarangkalian, kriptografi, reka bentuk algoritma, dll.
