Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah polimorfisme dalam C++ membantu mencipta kod yang fleksibel dan berskala?
C++ polimorfisme membolehkan objek digunakan dalam pelbagai cara, dilaksanakan melalui fungsi maya dan jadual maya. Ia menjadikan objek kelas terbitan berkelakuan berbeza daripada kelas asas: fungsi maya membenarkan fungsi kelas asas ditindih dalam kelas terbitan. Jadual maya menyimpan penunjuk ke alamat fungsi maya dan mencari dan memanggil fungsi yang sesuai secara dinamik berdasarkan jenis objek. Contoh praktikal menunjukkan cara menggunakan polimorfisme untuk mencipta koleksi objek dinamik, melaraskan gelagatnya berdasarkan jenisnya dan meningkatkan fleksibiliti kod. Polimorfisme dalam C++: Alat berkuasa untuk fleksibiliti dan skalabiliti Ia melakukan ini dengan membenarkan objek kelas terbitan berkelakuan berbeza daripada kelas asasnya.
Melaksanakan polimorfisme
Dalam C++, polimorfisme boleh dicapai dengan menggunakan fungsi maya dan jadual maya. Fungsi maya ialah fungsi yang membenarkan fungsi kelas asas ditindih dalam kelas terbitan. Jadual maya ialah jadual yang memegang penunjuk ke alamat fungsi maya.
Fungsi maya
class Base { public: virtual void display() { cout << "Base class display function" << endl; } }; class Derived : public Base { public: virtual void display() override { cout << "Derived class display function" << endl; } };Dalam contoh di atas, fungsi
display
kelas Base
ialah fungsi maya dalam kelas terbitan Derived
dilindungi.
Jadual maya
Jadual maya mengandungi penunjuk ke alamat fungsidisplay
kelas Base
dan kelas Derived
: class Base { public: virtual void display() { cout << "Base class display function" << endl; } }; class Derived : public Base { public: virtual void display() override { cout << "Derived class display function" << endl; } }; int main() { Base* ptr = new Derived(); // 指向 Derived 对象的 Base 类指针 ptr->display(); // 调用 Derived 类中的 display 函数 }Dalam contoh di atas, walaupun kita menggunakan penuding kelas
Base
, penuding sebenarnya menunjuk ke objek kelas terbitan Derived
. Apabila fungsi display
dipanggil, ia secara dinamik mencari dan memanggil fungsi yang sesuai berdasarkan jenis objek sebenar yang ditunjuk. Kes Praktikal: Hierarki Kelas Bentuk
Base
类的 display
函数是虚函数,在派生类 Derived
中被覆盖。
虚表
虚表包含指向 Base
类和 Derived
类的 display
函数地址的指针:
class Shape { public: virtual float area() = 0; // 纯虚函数 }; class Circle : public Shape { public: Circle(float radius) : mRadius(radius) {} float area() override { return 3.14 * mRadius * mRadius; } private: float mRadius; }; class Rectangle : public Shape { public: Rectangle(float width, float height) : mWidth(width), mHeight(height) {} float area() override { return mWidth * mHeight; } private: float mWidth; float mHeight; };
在上述示例中,尽管我们使用的是 Base
类指针,但该指针实际指向派生类 Derived
的一个对象。当调用 display
函数时,它会根据指向的实际对象类型动态查找并调用适当的函数。
实战案例:形状类层次结构
考虑一个形状类层次结构,其中有 Shape
基类和 Circle
和 Rectangle
派生类。Shape
类具有计算面积的虚函数。
int main() { Shape* shapes[] = {new Circle(5), new Rectangle(10, 5)}; for (Shape* shape : shapes) { cout << "Area: " << shape->area() << endl; } return 0; }
在主函数中,我们可以使用 Shape
类指针来存储不同形状对象的引用,并调用 area
Pertimbangkan hierarki kelas bentuk dengan kelas asas Shape
dan Bulatan
dan Rectangle
kelas Terbitan. Kelas Shape
mempunyai fungsi maya untuk mengira kawasan.
Dalam fungsi utama, kita boleh menggunakan penunjuk kelas Shape
untuk menyimpan rujukan kepada objek bentuk yang berbeza dan memanggil fungsi kawasan
untuk mengira kawasannya: rrreee
Atas ialah kandungan terperinci Bagaimanakah polimorfisme dalam C++ membantu mencipta kod yang fleksibel dan berskala?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!