Fungsi penulisan semula membolehkan subkelas mentakrifkan semula fungsi dengan nama yang sama bagi kelas asas untuk melaksanakan fungsi khusus subkelas: berdasarkan carian nama dan padanan jenis, apabila subkelas mentakrifkan fungsi dengan nama yang sama, fungsi kelas asas akan ditulis semula. Ini membolehkan subkelas menyediakan pelaksanaan yang berbeza, contohnya kelas Bulatan dan Segiempat tepat dalam contoh mengatasi fungsi kawasan() kelas Shape untuk mengira kawasan mereka sendiri.
Penulisan semula fungsi C++: pelaksanaan fungsi khusus subkelas
Penulisan semula fungsi ialah mekanisme penting dalam C++, yang membolehkan subkelas mentakrifkan semula gelagat fungsi dengan nama yang sama dalam kelas asas. Ini berguna untuk mentakrifkan fungsi khusus khusus untuk subkelas.
Prinsip
Fungsi penulisan semula adalah berdasarkan carian nama dan peraturan padanan jenis. Apabila fungsi dipanggil, pengkompil mencari skop untuk fungsi dengan nama yang sepadan. Jika berbilang fungsi terlebih beban ditemui, prinsip padanan terbaik digunakan untuk pemilihan.
Jika subkelas mentakrifkan fungsi dengan nama yang sama dengan kelas asas, fungsi dalam subkelas akan mengatasi fungsi dalam kelas asas. Ini membolehkan subkelas menyediakan pelaksanaan yang berbeza daripada kelas asas.
Kes Praktikal
Pertimbangkan senario di mana kita mempunyai kelas asas Bulatan
dan Rectangle
masing-masing mewakili bulatan dan segi empat tepat. Kita perlu mengira luas bentuk-bentuk ini. Shape
基类,表示一个通用形状。派生类 Circle
和 Rectangle
分别表示圆形和矩形。我们需要计算这些形状的面积。
基类 Shape
class Shape { public: virtual double area() const = 0; // 纯虚函数 };
派生类 Circle
class Circle : public Shape { public: Circle(double radius) : radius(radius) {} double area() const override { return M_PI * radius * radius; } private: double radius; };
派生类 Rectangle
class Rectangle : public Shape { public: Rectangle(double width, double height) : width(width), height(height) {} double area() const override { return width * height; } private: double width, height; };
使用
我们可以使用这些类来计算不同形状的面积:
int main() { Circle circle(5.0); Rectangle rectangle(3.0, 4.0); std::cout << "Area of circle: " << circle.area() << std::endl; std::cout << "Area of rectangle: " << rectangle.area() << std::endl; return 0; }
输出:
Area of circle: 78.5398 Area of rectangle: 12.0
在这个示例中,Circle
和 Rectangle
类重写了 Shape
类中定义的 area()
Bulatan
dan Rectangle
mengatasi fungsi area()
yang ditakrifkan dalam Shape
> kelas. Ini membolehkan kami melaksanakan logik pengiraan kawasan khusus untuk setiap bentuk. 🎜Atas ialah kandungan terperinci Penulisan semula fungsi C++ dalam amalan: helah untuk melaksanakan fungsi khusus subkelas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!