


Penulisan semula fungsi C++: membuka lembaran baharu pewarisan fleksibel
May 03, 2024 pm 02:03 PMPenulisan semula fungsi C++ membolehkan subkelas mengatasi fungsi kelas induk, mencapai polimorfisme dan membawa fleksibiliti warisan. Apabila menulis semula fungsi, tandatangan fungsi subkelas mestilah betul-betul sama dengan fungsi kelas induk, yang dikenal pasti oleh kata kunci ganti. Kelebihan termasuk fleksibiliti, polimorfisme, dan penggunaan semula kod. Walau bagaimanapun, sila ambil perhatian bahawa peraturan padanan tandatangan dan pengubahsuai akhir tidak boleh ditindih.
Penulisan semula fungsi C++: Membuka lembaran baharu pewarisan fleksibel
Kata Pengantar
Fungsi menulis semula ialah ciri C++.ride yang berkuasa yang membolehkan subkelas untuk menggantikan fungsi morfologi Ini membuka kemungkinan baharu untuk warisan fleksibel, membenarkan subkelas menyesuaikan tingkah laku mereka sambil mengekalkan kefungsian asas kelas induk.
Syntax
Untuk mengatasi fungsi, subkelas perlu mengisytiharkan fungsi baharu dengan tandatangan yang sama seperti fungsi kelas induk. Jenis pemulangan fungsi baharu, parameter dan nama mestilah betul-betul sama dengan fungsi kelas induk. Berikut ialah sintaks untuk mengatasi fungsi:
returntype ClassName::functionName(parameters) { // 子类的函数体 }
di mana, returntype
ialah jenis pulangan fungsi, ClassName
ialah nama subkelas dan functionName
ialah Untuk mengatasi nama fungsi, parameter
ialah senarai parameter fungsi. returntype
是函数的返回类型,ClassName
是子类的名称,functionName
是要重写函数的名称,parameters
是函数的参数列表。
实战案例
考虑这样一个父类:
class Shape { public: virtual double area() { return 0.0; } };
我们想创建一个子类 Rectangle
,它具有与父类相同的 area()
函数,但提供自己的实现:
class Rectangle : public Shape { public: double length; double width; Rectangle(double l, double w) : length(l), width(w) {} double area() override { return length * width; } };
在子类 Rectangle
中,我们重写了 area()
函数并添加了 length
和 width
成员变量来存储矩形的尺寸。通过使用 override
关键字,我们可以显式指示该函数是重写父类函数。
优点
函数重写提供了以下优点:
- 灵活性:允许子类自定义其行为,同时保留父类的基本功能。
- 多态性:支持通过基类指针引用不同类型的对象,并调用正确的重写函数。
- 代码重用:父类中的通用功能可以被子类共享,避免重复性代码。
注意事项
- 函数重写遵循“签名匹配”规则,即子类函数的返回类型、参数和名称必须与父类函数相同。
- 如果子类函数未覆盖父类函数,则编译器将发出警告。
- 如果父类函数被声明为
final
kawasan()
yang sama dengan kelas induk , tetapi sediakan pelaksanaan anda sendiri: 🎜rrreee🎜Dalam subkelas Rectangle
, kami mengatasi fungsi area()
dan menambah length
dan width
pembolehubah ahli untuk menyimpan saiz segi empat tepat. Dengan menggunakan kata kunci override
, kami boleh menunjukkan dengan jelas bahawa fungsi itu mengatasi fungsi kelas induk. 🎜🎜🎜 Kelebihan 🎜🎜🎜 Penggantian fungsi memberikan kelebihan berikut: 🎜- 🎜Fleksibiliti: 🎜 Membenarkan subkelas menyesuaikan tingkah laku mereka sambil mengekalkan fungsi asas kelas induk. 🎜
- 🎜Polymorphism: 🎜Menyokong merujuk pelbagai jenis objek melalui penunjuk kelas asas dan memanggil fungsi ganti yang betul. 🎜
- 🎜Penggunaan semula kod: 🎜Fungsi biasa dalam kelas induk boleh dikongsi oleh subkelas untuk mengelakkan kod pendua. 🎜🎜🎜🎜Nota🎜🎜
- Penulisan semula fungsi mengikut peraturan "padanan tandatangan", iaitu jenis pulangan, parameter dan nama fungsi subkelas mestilah sama dengan fungsi kelas induk. 🎜
- Pengkompil akan mengeluarkan amaran jika fungsi subkelas tidak mengatasi fungsi kelas induk. 🎜
- Jika fungsi kelas induk diisytiharkan
final
, ia tidak boleh ditindih dalam kelas anak. 🎜🎜
Atas ialah kandungan terperinci Penulisan semula fungsi C++: membuka lembaran baharu pewarisan fleksibel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel 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

Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++?

Reka letak objek C++ diselaraskan dengan memori untuk mengoptimumkan kecekapan penggunaan memori

Bagaimana untuk melaksanakan pembanding tersuai dalam C++ STL?

Bagaimana untuk melaksanakan Corak Reka Bentuk Strategi dalam C++?

Persamaan dan Perbezaan antara Golang dan C++

Bagaimana untuk menyalin bekas C++ STL?

Apakah prinsip pelaksanaan asas penunjuk pintar C++?

Bagaimana untuk melaksanakan pengaturcaraan berbilang benang C++ berdasarkan model Aktor?
