Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penulisan semula fungsi C++: Membongkar rahsia liputan tingkah laku dalam warisan

Penulisan semula fungsi C++: Membongkar rahsia liputan tingkah laku dalam warisan

WBOY
WBOYasal
2024-04-30 15:12:02795semak imbas

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.

C++ 函数重写:揭开继承中的行为覆盖秘籍

Penggantian Fungsi C++: Mendedahkan Rahsia Mengatasi Tingkah Laku dalam Warisan

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.

Syntax and Rules

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(),由派生类 RectangleCircle 重写以提供实际的面积计算。通过多态,我们可以使用 shapes 数组中的基类指针调用 getArea()rrreee

Peraturan untuk penulisan semula fungsi adalah seperti berikut: 🎜
  • Fungsi kelas terbitan mesti mempunyai nama, senarai parameter dan jenis pulangan yang sama.
  • Fungsi kelas terbitan mesti menggunakan kata kunci override.
  • Kebenaran akses bagi fungsi kelas terbitan mestilah tidak lebih rendah daripada fungsi kelas asas.
🎜Kes praktikal🎜🎜Pertimbangkan kelas abstrak bentuk dan dua kelas terbitannya segi empat tepat dan bulatan. 🎜rrreee🎜Dalam contoh ini, kelas 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!

Kenyataan:
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