


Penjelasan terperinci tentang warisan fungsi C++: Apakah intipati polimorfisme?
Ikhtisar pewarisan fungsi: Pewarisan fungsi dalam C++ dilaksanakan melalui kata kunci ganti, membenarkan subkelas mengatasi fungsi kelas induk, menjadikan polimorfisme mungkin, iaitu, objek menunjukkan gelagat berbeza pada masa jalanan, walaupun ia tergolong dalam kelas induk yang sama.
Penjelasan Terperinci Pewarisan Fungsi C++: Intipati Polimorfisme
Dalam pengaturcaraan berorientasikan objek, pewarisan ialah mekanisme penting, yang membolehkan subkelas mewarisi ahli data dan fungsi ahli daripada kelas induk. Warisan fungsi merujuk kepada warisan fungsi ahli daripada kelas induk kepada kelas anak.
Pengenalan kepada Polimorfisme
Polymorphism ialah konsep utama dalam pengaturcaraan berorientasikan objek yang membolehkan objek berkelakuan berbeza pada masa jalanan, walaupun ia tergolong dalam kelas induk yang sama. Warisan fungsi ialah satu cara untuk mencapai polimorfisme.
Warisan fungsi
Dalam C++, warisan fungsi dilaksanakan melalui kata kunci override
. Apabila kelas kanak-kanak mentakrifkan fungsi dengan nama dan tandatangan yang sama seperti kelas induk, fungsi itu ditandakan override
. Ini memberitahu pengkompil bahawa subkelas mengatasi fungsi kelas induk. override
关键字实现。当子类定义了一个与父类同名且具有相同签名的函数时,该函数被标记为 override
。这会告诉编译器,子类正在覆盖父类的函数。
class Base { public: virtual void print() { std::cout << "Base class" << std::endl; } }; class Derived : public Base { public: virtual void print() override { std::cout << "Derived class" << std::endl; } };
在此示例中,Base
类定义了一个 print()
函数,而 Derived
类通过 override
关键字覆盖了该函数。因此,当调用 Derived
类对象的 print()
函数时,它将打印 "Derived class",而不是 "Base class"。
虚函数
override
函数必须是虚函数。虚函数通过 virtual
关键字声明,它允许子类覆盖父类的函数。在上面的示例中,print()
函数是虚函数。
实战案例
下面是一个演示函数继承和多态的代码案例:
#include <iostream> class Shape { public: virtual double getArea() = 0; }; class Rectangle : public Shape { public: double width, height; Rectangle(double w, double h) : width(w), height(h) {} double getArea() override { return width * height; } }; class Circle : public Shape { public: double radius; Circle(double r) : radius(r) {} double getArea() override { return 3.14 * radius * radius; } }; int main() { Shape* shapes[] = {new Rectangle(2, 3), new Circle(4)}; for (int i = 0; i < 2; i++) { std::cout << "Area of " << (i == 0 ? "Rectangle" : "Circle") << ": " << shapes[i]->getArea() << std::endl; } return 0; }
在该案例中,Shape
是形状类的基类,它定义了一个纯虚函数 getArea()
。Rectangle
和 Circle
类从 Shape
类继承,并覆盖了 getArea()
函数以计算各自的面积。
在 main()
函数中,使用多态,一个基类数组被用于存储 Rectangle
和 Circle
对象。由于 getArea()
rrreee
Base
mentakrifkan fungsi print()
dan kelas Derived
melepasi override
kata kunci mengatasi fungsi ini. Oleh itu, apabila fungsi print()
objek kelas Derived
dipanggil, ia akan mencetak "Kelas terbitan" dan bukannya "Kelas asas". Fungsi maya🎜🎜 Fungsioverride
mestilah fungsi maya. Fungsi maya diisytiharkan dengan kata kunci virtual
, yang membenarkan subkelas mengatasi fungsi kelas induk. Dalam contoh di atas, fungsi print()
adalah maya. 🎜🎜Kes praktikal🎜🎜Berikut ialah contoh kod yang menunjukkan pewarisan fungsi dan polimorfisme: 🎜rrreee🎜Dalam kes ini, Rectangle
dan Circle
mewarisi daripada kelas Shape
dan mengatasi fungsi getArea()
untuk mengira kawasan masing-masing . 🎜🎜Dalam fungsi main()
, menggunakan polimorfisme, tatasusunan kelas asas digunakan untuk menyimpan objek Rectangle
dan Circle
. Oleh kerana fungsi getArea()
ditindih, kawasan yang betul dicetak berdasarkan jenis objek. 🎜🎜Dengan pewarisan fungsi dan polimorfisme, kita boleh membina atur cara yang fleksibel dan boleh dikembangkan dengan gelagat yang berbeza. 🎜Atas ialah kandungan terperinci Penjelasan terperinci tentang warisan fungsi C++: Apakah intipati polimorfisme?. 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.

Golang dan C++ masing-masing adalah sampah yang dikumpul dan bahasa pengaturcaraan pengurusan memori manual, dengan sistem sintaks dan jenis yang berbeza. Golang melaksanakan pengaturcaraan serentak melalui Goroutine, dan C++ melaksanakannya melalui benang. Pengurusan memori Golang adalah mudah, dan C++ mempunyai prestasi yang lebih kukuh. Dalam kes praktikal, kod Golang adalah lebih ringkas dan C++ mempunyai kelebihan prestasi yang jelas.

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.

Untuk lelaran ke atas bekas STL, anda boleh menggunakan fungsi begin() dan end() bekas untuk mendapatkan julat lelaran: Vektor: Gunakan gelung for untuk lelaran ke atas julat lelaran. Senarai terpaut: Gunakan fungsi ahli seterusnya() untuk melintasi elemen senarai terpaut. Pemetaan: Dapatkan iterator nilai kunci dan gunakan gelung for untuk melintasinya.

Templat C++ digunakan secara meluas dalam pembangunan sebenar, termasuk templat kelas kontena, templat algoritma, templat fungsi generik dan templat pengaturcaraan meta. Sebagai contoh, algoritma pengisihan generik boleh mengisih tatasusunan jenis data yang berbeza.

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

Bagaimana untuk mengakses elemen dalam bekas C++ STL? Terdapat beberapa cara untuk melakukan ini: Melintasi bekas: Gunakan lelaran Berasaskan julat untuk gelung untuk mengakses elemen tertentu: Gunakan indeks (pengendali subskrip []) Gunakan kekunci (std::map atau std::unordered_map)
