Rumah >pembangunan bahagian belakang >C++ >Pautan penulisan semula fungsi dan fungsi maya: gabungan kuat pengikatan dinamik dalam warisan

Pautan penulisan semula fungsi dan fungsi maya: gabungan kuat pengikatan dinamik dalam warisan

WBOY
WBOYasal
2024-05-04 11:15:01904semak imbas

Fungsi penulisan semula dan fungsi maya berfungsi bersama untuk mencapai pengikatan dinamik dalam warisan. Apabila kelas terbitan mengatasi fungsi maya kelas induk, fungsi ganti dipanggil pada masa jalan berdasarkan jenis objek sebenar, walaupun kelas induk tidak mengetahui kewujudan kelas terbitan pada masa penyusunan.

Pautan penulisan semula fungsi dan fungsi maya: gabungan kuat pengikatan dinamik dalam warisan

Kaitan antara fungsi mengatasi dan fungsi maya: gabungan kuat pengikatan dinamik dalam warisan

Dalam pengaturcaraan berorientasikan objek (OOP), fungsi overriding dan fungsi maya ialah dua konsep yang berkait rapat untuk melaksanakan dinamik mengikat dalam warisan. Pengikatan dinamik membenarkan rujukan kelas induk untuk menunjuk ke objek kelas terbitannya dan kaedah ganti panggilan dalam kelas terbitan, walaupun kelas induk tidak mengetahui kewujudan kelas terbitan pada masa penyusunan.

Fungsi menulis semula

Fungsi menulis semula merujuk kepada mentakrifkan fungsi dalam kelas terbitan dengan nama dan parameter yang sama seperti kelas induk. Apabila objek kelas terbitan dipanggil, kaedah ganti dalam kelas terbitan akan dipanggil, bukan kaedah dalam kelas induk. Ini membolehkan kelas terbitan mengubah suai atau melanjutkan tingkah laku dalam kelas induk.

Fungsi maya

Fungsi maya ialah fungsi yang diisytiharkan sebagai maya dalam kelas induk. Apabila kelas terbitan mengatasi fungsi maya, ia mencipta fungsi dengan nama dan parameter yang sama seperti fungsi dalam kelas induk. Ini memberitahu pengkompil untuk memanggil fungsi yang betul pada masa jalan berdasarkan jenis sebenar objek. virtual 的函数。当派生类重写虚拟函数时,它建立了一个与父类中的函数具有相同名称和参数的函数。这告诉编译器在运行时根据对象的实际类型调用正确的函数。

实战案例

考虑下面这个例子:

#include <iostream>

using namespace std;

class Animal {
public:
  virtual void speak() { cout << "Animal speaking" << endl; }
};

class Dog : public Animal {
public:
  void speak() override { cout << "Dog barking" << endl; }
};

int main() {
  Animal* animal = new Dog();  // 创建 Dog 对象,但使用 Animal 指针
  animal->speak();  // 调用 Dog 类的 speak() 方法
  return 0;
}

在这个例子中:

  • Animal 是父类,它定义了一个名为 speak 的虚拟函数。
  • Dog 是派生类,它重写了 speak 方法以实现不同的行为。
  • main 函数中,创建一个指向 Dog 对象的 Animal 指针。
  • 当调用 Animal 指针上的 speak 方法时,编译器将根据指向的实际 Dog 对象调用重写的 Dog::speak
Kes praktikal

Pertimbangkan contoh berikut:

Dog barking
🎜Dalam contoh ini: 🎜
  • Animal ialah kelas induk, yang mentakrifkan kelas bernama speak fungsi maya. 🎜<li> <code>Anjing ialah kelas terbitan yang mengatasi kaedah speak untuk mencapai gelagat yang berbeza. 🎜
  • Dalam fungsi utama, buat penunjuk Haiwan ke objek Anjing. 🎜
  • Apabila memanggil kaedah speak pada penunjuk Haiwan, pengkompil akan memanggil yang diganti berdasarkan objek <code>Anjing sebenar menunjuk kepada kaedah >Dog::speak. 🎜🎜🎜Output: 🎜rrreee🎜Mekanisme ini membolehkan kami memanggil fungsi yang diganti secara dinamik berdasarkan jenis objek sebenar, sekali gus mencapai sistem pewarisan yang fleksibel dan boleh diperluaskan. 🎜

Atas ialah kandungan terperinci Pautan penulisan semula fungsi dan fungsi maya: gabungan kuat pengikatan dinamik dalam warisan. 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