Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang warisan fungsi C++: Apakah intipati polimorfisme?

Penjelasan terperinci tentang warisan fungsi C++: Apakah intipati polimorfisme?

WBOY
WBOYasal
2024-05-04 21:30:021052semak imbas

Ikhtisar pewarisan fungsi: Pewarisan fungsi dalam C++ dilaksanakan melalui kata kunci ganti, membenarkan subkelas mengatasi fungsi kelas induk, menjadikan polimorfisme mungkin, iaitu, objek menunjukkan gelagat berbeza pada masa jalanan, walaupun ia tergolong dalam kelas induk yang sama.

C++ 函数继承详解:多态的本质是什么?

Penjelasan Terperinci Pewarisan Fungsi C++: Intipati Polimorfisme

Dalam pengaturcaraan berorientasikan objek, pewarisan ialah mekanisme penting, yang membolehkan subkelas mewarisi ahli data dan fungsi ahli daripada kelas induk. Warisan fungsi merujuk kepada warisan fungsi ahli daripada kelas induk kepada kelas anak.

Pengenalan kepada Polimorfisme

Polymorphism ialah konsep utama dalam pengaturcaraan berorientasikan objek yang membolehkan objek berkelakuan berbeza pada masa jalanan, walaupun ia tergolong dalam kelas induk yang sama. Warisan fungsi ialah satu cara untuk mencapai polimorfisme.

Warisan fungsi

Dalam C++, warisan fungsi dilaksanakan melalui kata kunci override. Apabila kelas kanak-kanak mentakrifkan fungsi dengan nama dan tandatangan yang sama seperti kelas induk, fungsi itu ditandakan override. Ini memberitahu pengkompil bahawa subkelas mengatasi fungsi kelas induk. override 关键字实现。当子类定义了一个与父类同名且具有相同签名的函数时,该函数被标记为 override。这会告诉编译器,子类正在覆盖父类的函数。

class Base {
public:
    virtual void print() {
        std::cout << "Base class" << std::endl;
    }
};

class Derived : public Base {
public:
    virtual void print() override {
        std::cout << "Derived class" << std::endl;
    }
};

在此示例中,Base 类定义了一个 print() 函数,而 Derived 类通过 override 关键字覆盖了该函数。因此,当调用 Derived 类对象的 print() 函数时,它将打印 "Derived class",而不是 "Base class"。

虚函数

override 函数必须是虚函数。虚函数通过 virtual 关键字声明,它允许子类覆盖父类的函数。在上面的示例中,print() 函数是虚函数。

实战案例

下面是一个演示函数继承和多态的代码案例:

#include <iostream>

class Shape {
public:
    virtual double getArea() = 0;
};

class Rectangle : public Shape {
public:
    double width, height;
    Rectangle(double w, double h) : width(w), height(h) {}
    double getArea() override { return width * height; }
};

class Circle : public Shape {
public:
    double radius;
    Circle(double r) : radius(r) {}
    double getArea() override { return 3.14 * radius * radius; }
};

int main() {
    Shape* shapes[] = {new Rectangle(2, 3), new Circle(4)};

    for (int i = 0; i < 2; i++) {
        std::cout << "Area of " << (i == 0 ? "Rectangle" : "Circle") << ": " << shapes[i]->getArea() << std::endl;
    }

    return 0;
}

在该案例中,Shape 是形状类的基类,它定义了一个纯虚函数 getArea()RectangleCircle 类从 Shape 类继承,并覆盖了 getArea() 函数以计算各自的面积。

main() 函数中,使用多态,一个基类数组被用于存储 RectangleCircle 对象。由于 getArea()rrreee

Dalam contoh ini, kelas Base mentakrifkan fungsi print() dan kelas Derived melepasi override kata kunci mengatasi fungsi ini. Oleh itu, apabila fungsi print() objek kelas Derived dipanggil, ia akan mencetak "Kelas terbitan" dan bukannya "Kelas asas".

Fungsi maya🎜🎜 Fungsioverride mestilah fungsi maya. Fungsi maya diisytiharkan dengan kata kunci virtual, yang membenarkan subkelas mengatasi fungsi kelas induk. Dalam contoh di atas, fungsi print() adalah maya. 🎜🎜Kes praktikal🎜🎜Berikut ialah contoh kod yang menunjukkan pewarisan fungsi dan polimorfisme: 🎜rrreee🎜Dalam kes ini, Bentuk ialah kelas asas kelas bentuk, yang mentakrifkan fungsi maya tulengetArea(). Kelas Rectangle dan Circle mewarisi daripada kelas Shape dan mengatasi fungsi getArea() untuk mengira kawasan masing-masing . 🎜🎜Dalam fungsi main(), menggunakan polimorfisme, tatasusunan kelas asas digunakan untuk menyimpan objek Rectangle dan Circle. Oleh kerana fungsi getArea() ditindih, kawasan yang betul dicetak berdasarkan jenis objek. 🎜🎜Dengan pewarisan fungsi dan polimorfisme, kita boleh membina atur cara yang fleksibel dan boleh dikembangkan dengan gelagat yang berbeza. 🎜

Atas ialah kandungan terperinci Penjelasan terperinci tentang warisan fungsi C++: Apakah intipati polimorfisme?. 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