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

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

May 03, 2024 pm 02:03 PM
c++ Fungsi menulis semula

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!

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

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++? Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++? Jun 05, 2024 am 11:00 AM

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

Reka letak objek C++ diselaraskan dengan memori untuk mengoptimumkan kecekapan penggunaan memori Reka letak objek C++ diselaraskan dengan memori untuk mengoptimumkan kecekapan penggunaan memori Jun 05, 2024 pm 01:02 PM

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

Bagaimana untuk melaksanakan pembanding tersuai dalam C++ STL? Bagaimana untuk melaksanakan pembanding tersuai dalam C++ STL? Jun 05, 2024 am 11:50 AM

Bagaimana untuk melaksanakan pembanding tersuai dalam C++ STL?

Bagaimana untuk melaksanakan Corak Reka Bentuk Strategi dalam C++? Bagaimana untuk melaksanakan Corak Reka Bentuk Strategi dalam C++? Jun 06, 2024 pm 04:16 PM

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

Persamaan dan Perbezaan antara Golang dan C++ Persamaan dan Perbezaan antara Golang dan C++ Jun 05, 2024 pm 06:12 PM

Persamaan dan Perbezaan antara Golang dan C++

Bagaimana untuk menyalin bekas C++ STL? Bagaimana untuk menyalin bekas C++ STL? Jun 05, 2024 am 11:51 AM

Bagaimana untuk menyalin bekas C++ STL?

Apakah prinsip pelaksanaan asas penunjuk pintar C++? Apakah prinsip pelaksanaan asas penunjuk pintar C++? Jun 05, 2024 pm 01:17 PM

Apakah prinsip pelaksanaan asas penunjuk pintar C++?

Bagaimana untuk melaksanakan pengaturcaraan berbilang benang C++ berdasarkan model Aktor? Bagaimana untuk melaksanakan pengaturcaraan berbilang benang C++ berdasarkan model Aktor? Jun 05, 2024 am 11:49 AM

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

See all articles