Rumah > pembangunan bahagian belakang > C++ > Penulisan semula fungsi C++ dalam amalan: helah untuk melaksanakan fungsi khusus subkelas

Penulisan semula fungsi C++ dalam amalan: helah untuk melaksanakan fungsi khusus subkelas

WBOY
Lepaskan: 2024-05-01 13:36:02
asal
948 orang telah melayarinya

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.

C++ 函数重写实战:实现子类专属功能的妙招

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 Bentuk yang mewakili bentuk generik. Kelas terbitan Bulatan dan Rectangle masing-masing mewakili bulatan dan segi empat tepat. Kita perlu mengira luas bentuk-bentuk ini. Shape 基类,表示一个通用形状。派生类 CircleRectangle 分别表示圆形和矩形。我们需要计算这些形状的面积。

基类 Shape

class Shape {
public:
    virtual double area() const = 0;  // 纯虚函数
};
Salin selepas log masuk

派生类 Circle

class Circle : public Shape {
public:
    Circle(double radius) : radius(radius) {}

    double area() const override {
        return M_PI * radius * radius;
    }

private:
    double radius;
};
Salin selepas log masuk

派生类 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;
};
Salin selepas log masuk

使用

我们可以使用这些类来计算不同形状的面积:

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;
}
Salin selepas log masuk

输出:

Area of circle: 78.5398
Area of rectangle: 12.0
Salin selepas log masuk

在这个示例中,CircleRectangle 类重写了 Shape 类中定义的 area()

🎜Bentuk kelas asas🎜🎜rrreee🎜🎜Bulatan kelas terbitan🎜🎜rrreee🎜🎜Kelas terbitan Rectangle🎜🎜rrreee🎜🎜Menggunakan 🎜🎜menggunakan 🎜🎜menggunakan 🎜🎜 ini 🎜rrreee🎜 Output : 🎜rrreee 🎜Dalam contoh ini, kelas 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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan