Rumah > Artikel > pembangunan bahagian belakang > Apakah mekanisme pelaksanaan warisan dan polimorfisme dalam C++?
Mekanisme pelaksanaan warisan dan polimorfisme dalam C++: Warisan: Dilaksanakan melalui penentu warisan, kelas terbitan mewarisi dan melanjutkan tingkah laku kelas asas. Polimorfisme: direalisasikan melalui jadual fungsi maya, penunjuk kelas asas secara dinamik memanggil kaedah kelas terbitan. Contoh pelaksanaan: Melalui pewarisan dan polimorfisme, anda boleh membuat hierarki kelas bentuk dan menulis fungsi untuk mengira jumlah kawasan sebarang bentuk.
Mekanisme pelaksanaan pewarisan dan polimorfisme dalam C++
Pewarisan dan polimorfisme ialah ciri penting dalam C++ untuk mencapai penggunaan semula kod dan pengikatan dinamik. Walau bagaimanapun, memahami pelaksanaan asasnya adalah penting untuk menulis kod yang cekap dan mantap.
Mekanisme Pelaksanaan
1. Pewarisan
Pewarisan ialah satu cara untuk mencipta kelas baharu (kelas terbitan) yang mewarisi dan melanjutkan tingkah laku kelas sedia ada (kelas asas). Dalam C++, pewarisan dilaksanakan melalui penentu warisan awam
, protected
atau private
. public
、protected
或 private
继承说明符实现。
例如:
class Animal { public: virtual void speak() { cout << "Animal sound" << endl; } }; class Dog : public Animal { public: void speak() override { cout << "Woof!" << endl; } };
在这个示例中,Dog
类继承了 Animal
基类的 speak()
方法,并覆盖了该方法以提供特定的行为。
2. 多态性
多态性是指在运行时根据对象的实际类型动态调用方法的能力。它使基类指针能够访问派生类对象中的方法。
C++ 中的多态性是通过虚函数表实现的。在编译期间,为每个虚函数生成一个虚函数表条目。当基类指针调用虚函数时,它将查找对象的虚函数表,然后调用相应的方法。
例如:
Animal* animal = new Dog(); animal->speak(); // 输出: "Woof!"
尽管 animal
指向的是 Animal
基类,但由于多态性,它将调用 Dog
对象中的 speak()
方法。
实战案例
考虑一个形状类层次结构,包括 Shape
基类和 Circle
、Square
和 Triangle
派生类。
class Shape { public: virtual double area() = 0; }; class Circle : public Shape { public: double area() override { return 3.14 * radius * radius; } }; class Square : public Shape { public: double area() override { return side * side; } }; class Triangle: public Shape { public: double area() override { return 0.5 * base * height; } };
通过使用继承和多态性,我们可以编写一个 calculateTotalArea()
double calculateTotalArea(vector<Shape*>& shapes) { double totalArea = 0; for (Shape* shape : shapes) { totalArea += shape->area(); } return totalArea; }🎜Dalam contoh ini, kelas
Anjing
mewarisi kaedah speak()
bagi kelas asas Animal
dan mengatasi Kaedah untuk menyediakan tingkah laku tertentu. 🎜🎜🎜2. Polimorfisme 🎜🎜🎜Polymorphism merujuk kepada keupayaan untuk memanggil kaedah secara dinamik pada masa jalan berdasarkan jenis objek sebenar. Ia membolehkan penunjuk kelas asas untuk mengakses kaedah dalam objek kelas terbitan. 🎜🎜Polymorphism dalam C++ dicapai melalui jadual fungsi maya. Semasa penyusunan, entri vtable dijana untuk setiap fungsi maya. Apabila penunjuk kelas asas memanggil fungsi maya, ia mencari vtable objek dan kemudian memanggil kaedah yang sesuai. 🎜🎜Contohnya: 🎜rrreee🎜Walaupun haiwan
menunjuk ke kelas asas Animal
, disebabkan polimorfisme, ia akan memanggil objek Dog
speak()
kaedah. 🎜🎜🎜Kes praktikal🎜🎜🎜Pertimbangkan hierarki kelas bentuk, termasuk kelas asas calculateTotalArea()
yang boleh mengira jumlah luas sebarang bentuk: 🎜rrreeeAtas ialah kandungan terperinci Apakah mekanisme pelaksanaan warisan dan polimorfisme dalam C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!