Rumah > pembangunan bahagian belakang > C++ > Penulisan semula fungsi C++: membuka lembaran baharu pewarisan fleksibel

Penulisan semula fungsi C++: membuka lembaran baharu pewarisan fleksibel

WBOY
Lepaskan: 2024-05-03 14:03:01
asal
417 orang telah melayarinya

Penulisan 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.

C++ 函数重写:开启灵活继承的全新篇章

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) {
  // 子类的函数体
}
Salin selepas log masuk

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

我们想创建一个子类 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;
  }
};
Salin selepas log masuk

在子类 Rectangle 中,我们重写了 area() 函数并添加了 lengthwidth 成员变量来存储矩形的尺寸。通过使用 override 关键字,我们可以显式指示该函数是重写父类函数。

优点

函数重写提供了以下优点:

  • 灵活性:允许子类自定义其行为,同时保留父类的基本功能。
  • 多态性:支持通过基类指针引用不同类型的对象,并调用正确的重写函数。
  • 代码重用:父类中的通用功能可以被子类共享,避免重复性代码。

注意事项

  • 函数重写遵循“签名匹配”规则,即子类函数的返回类型、参数和名称必须与父类函数相同。
  • 如果子类函数未覆盖父类函数,则编译器将发出警告。
  • 如果父类函数被声明为 final
Kes praktikal🎜🎜🎜Pertimbangkan kelas induk seperti itu: 🎜rrreee🎜Kami ingin mencipta subkelas Segi Empat yang mempunyai fungsi 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!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan