Penulisan semula fungsi berlaku apabila kelas terbitan mentakrifkan fungsi dengan nama yang sama dan melaksanakan fungsi yang berbeza. Peraturan termasuk: Gunakan kata kunci ganti. Nama, parameter dan jenis pulangan adalah sama dengan fungsi kelas asas. Hak akses mestilah tidak lebih rendah daripada fungsi kelas asas. Melalui overriding, kelas terbitan boleh mengatasi tingkah laku kelas asas, mencapai polimorfisme, dan secara dinamik memanggil kaedah nama yang sama dalam kelas terbitan yang berbeza.
Dalam C++, mengatasi fungsi ialah ciri utama untuk mencapai tingkah laku polimorfik melalui pewarisan. Penggantian fungsi berlaku apabila kelas terbitan mentakrifkan fungsi dengan nama yang sama dengan kelas asasnya tetapi dengan pelaksanaan yang berbeza.
Untuk mengatasi fungsi kelas asas, kelas terbitan mesti menggunakan kata kunci override
. Contohnya: override
关键字。例如:
class Base { public: virtual void print() { cout << "Base class print()" << endl; } }; class Derived : public Base { public: virtual void print() override { cout << "Derived class print()" << endl; } };
函数重写的规则如下:
override
关键字。考虑一个形状抽象类和它的两个派生类矩形和圆。
class Shape { public: virtual double getArea() = 0; }; class Rectangle : public Shape { public: double width, height; Rectangle(double w, double h) : width(w), height(h) {} override double getArea() { return width * height; } }; class Circle : public Shape { public: double radius; Circle(double r) : radius(r) {} override double getArea() { return M_PI * radius * radius; } }; int main() { Rectangle rect(5, 3); Circle circle(4); Shape* shapes[] = {&rect, &circle}; for (auto shape : shapes) { cout << "Shape area: " << shape->getArea() << endl; } }
在这个示例中,Shape
类定义了一个抽象方法 getArea()
,由派生类 Rectangle
和 Circle
重写以提供实际的面积计算。通过多态,我们可以使用 shapes
数组中的基类指针调用 getArea()
rrreee
override
. Shape
mentakrifkan kaedah abstrak getArea()
, yang digunakan oleh kelas terbitan Rectangle
dan Bulatan Ditindih untuk menyediakan pengiraan kawasan sebenar. Melalui polimorfisme, kita boleh mengira dan mengeluarkan kawasan bentuk yang berbeza secara dinamik dengan memanggil kaedah <code>getArea()
menggunakan penuding kelas asas dalam tatasusunan shapes
. 🎜Atas ialah kandungan terperinci Penulisan semula fungsi C++: Membongkar rahsia liputan tingkah laku dalam warisan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!