Rumah >pembangunan bahagian belakang >C++ >Mendedahkan prinsip penulisan semula fungsi: cara subkelas mengawal kelakuan kelas induk

Mendedahkan prinsip penulisan semula fungsi: cara subkelas mengawal kelakuan kelas induk

WBOY
WBOYasal
2024-05-04 09:06:021034semak imbas

Soalan: Apakah prinsip penulisan semula fungsi? Jawapan: Fungsi mengatasi membenarkan subkelas mengawal tingkah laku kelas induk dengan mentakrifkan semula kaedah yang diwarisi daripada kelas induk dengan mengisytiharkan kaedah dengan nama yang sama dan menggunakan kata kunci ganti. Langkah: Isytihar kaedah maya dalam pembina subkelas dan tandakannya dengan kata kunci maya. Tentukan jenis nilai pulangan kaedah, nama dan senarai parameter, yang sama dengan kaedah kelas induk. Gunakan kata kunci ganti untuk mengisytiharkan kaedah sebagai penggantian secara eksplisit.

Mendedahkan prinsip penulisan semula fungsi: cara subkelas mengawal kelakuan kelas induk

Pendedahan prinsip mengatasi fungsi: cara subkelas mengawal kelakuan kelas induk

Menimpa ialah konsep penting dalam pengaturcaraan berorientasikan objek, yang membolehkan subkelas mentakrifkan semula kaedah yang diwarisi daripada kelas induk. Melalui overriding, subkelas boleh menyesuaikan gelagat kelas induknya sambil mengekalkan keserasian dengan kod kelas asas.

Memahami overriding

Overriding diisytiharkan dalam pembina subkelas, dalam format berikut:

virtual <return type> <function name>(<parameter list>) override;
  • maya Kata kunci menunjukkan bahawa kaedah boleh ditindih oleh subkelas. virtual 关键字表示该方法可以被子类重写。
  • <return type></return> 指定方法的返回值类型。
  • <function name></function> 是被重写的方法名称。
  • <parameter list></parameter> 是方法的参数列表。
  • override 关键字明确声明该方法是对父类方法的重写。

实战案例

为了说明函数重写,我们创建一个带有 draw() 方法的 Shape 基类和一个名为 Circle 的子类:

class Shape {
public:
    virtual void draw() { cout << "Drawing Shape" << endl; }
};

class Circle : public Shape {
public:
    void draw() override { cout << "Drawing Circle" << endl; }
};

Shape 类的 draw() 方法被声明为 virtual,这意味着它可以被 Circle 类重写。在 Circle 类中,draw() 方法被重新定义,打印出 "Drawing Circle"。

重写工作原理

当子类对象调用 draw() 方法时,编译器会动态选择与该对象关联的适当实现。如果对象是一个 Circle 实例,则会调用重写后的 Circle::draw() 方法。否则,它将调用基类的 Shape::draw() 方法。

优点

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

  • 允许子类根据需要定制其父类行为。
  • 维护代码的可扩展性和可重用性。
  • 促进代码重构,无需修改基类。

注意事项

重写时应遵循以下注意事项:

  • 方法签名(返回类型和参数列表)必须与父类方法相同。
  • 重写的方法不能比其父类方法的访问权限级别更严格。
  • 重写的方法通常使用 override
  • <return type></return> Menentukan jenis nilai pulangan kaedah.
🎜 ialah nama kaedah yang diganti. 🎜🎜 ialah senarai parameter kaedah. Kata kunci 🎜🎜override secara eksplisit mengisytiharkan bahawa kaedah tersebut adalah menimpa kaedah kelas induk. 🎜🎜🎜🎜Kes praktikal🎜🎜🎜Untuk menggambarkan penulisan semula fungsi, kami mencipta kelas asas Shape dengan kaedah draw() dan kelas bernama Subkelas Bulatan bagi : 🎜rrreee🎜 Kaedah draw() kelas Shape diisytiharkan sebagai virtual, yang bermaksud ia boleh menjadi Kalangan ganti kelas. Dalam kelas Bulatan, kaedah draw() ditakrifkan semula untuk mencetak "Bulatan Lukisan". 🎜🎜🎜Cara overriding berfungsi🎜🎜🎜Apabila objek subkelas memanggil kaedah draw(), pengkompil secara dinamik memilih pelaksanaan yang sesuai yang dikaitkan dengan objek. Jika objek ialah contoh Lingkaran, kaedah Circle::draw() yang ditindih dipanggil. Jika tidak, ia memanggil kaedah Shape::draw() kelas asas. 🎜🎜🎜 Kelebihan 🎜🎜🎜 Penggantian fungsi memberikan kelebihan berikut: 🎜🎜🎜 Membenarkan subkelas menyesuaikan gelagat kelas induknya mengikut keperluan. 🎜🎜Kekalkan kebolehskalaan dan kebolehgunaan semula kod. 🎜🎜Memudahkan pemfaktoran semula kod tanpa mengubah suai kelas asas. 🎜🎜🎜🎜Nota🎜🎜🎜Pertimbangan berikut hendaklah diikuti apabila mengatasi: 🎜🎜🎜Tandatangan kaedah (jenis pemulangan dan senarai parameter) mestilah sama dengan kaedah kelas induk. 🎜🎜Kaedah yang ditindih tidak boleh mempunyai tahap akses yang lebih ketat daripada kaedah kelas induknya. 🎜🎜Kaedah yang dibatalkan biasanya menggunakan kata kunci override untuk menyediakan semakan masa kompilasi dan mengelakkan timpa tidak sengaja. 🎜🎜

Atas ialah kandungan terperinci Mendedahkan prinsip penulisan semula fungsi: cara subkelas mengawal kelakuan kelas induk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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