Apakah mekanisme pelaksanaan warisan dan polimorfisme dalam C++?

WBOY
Lepaskan: 2024-06-01 20:52:00
asal
604 orang telah melayarinya

Mekanisme pelaksanaan warisan dan polimorfisme dalam C++: Warisan: Dilaksanakan melalui penentu warisan, kelas terbitan mewarisi dan melanjutkan tingkah laku kelas asas. Polimorfisme: direalisasikan melalui jadual fungsi maya, penunjuk kelas asas secara dinamik memanggil kaedah kelas terbitan. Contoh pelaksanaan: Melalui pewarisan dan polimorfisme, anda boleh membuat hierarki kelas bentuk dan menulis fungsi untuk mengira jumlah kawasan sebarang bentuk.

C++ 中继承和多态性的实现机制是什么?

Mekanisme pelaksanaan pewarisan dan polimorfisme dalam C++

Pewarisan dan polimorfisme ialah ciri penting dalam C++ untuk mencapai penggunaan semula kod dan pengikatan dinamik. Walau bagaimanapun, memahami pelaksanaan asasnya adalah penting untuk menulis kod yang cekap dan mantap.

Mekanisme Pelaksanaan

1. Pewarisan

Pewarisan ialah satu cara untuk mencipta kelas baharu (kelas terbitan) yang mewarisi dan melanjutkan tingkah laku kelas sedia ada (kelas asas). Dalam C++, pewarisan dilaksanakan melalui penentu warisan awam, protected atau private. publicprotectedprivate 继承说明符实现。

例如:

class Animal {
public:
    virtual void speak() { cout << "Animal sound" << endl; }
};

class Dog : public Animal {
public:
    void speak() override { cout << "Woof!" << endl; }
};
Salin selepas log masuk

在这个示例中,Dog 类继承了 Animal 基类的 speak() 方法,并覆盖了该方法以提供特定的行为。

2. 多态性

多态性是指在运行时根据对象的实际类型动态调用方法的能力。它使基类指针能够访问派生类对象中的方法。

C++ 中的多态性是通过虚函数表实现的。在编译期间,为每个虚函数生成一个虚函数表条目。当基类指针调用虚函数时,它将查找对象的虚函数表,然后调用相应的方法。

例如:

Animal* animal = new Dog();
animal->speak(); // 输出: "Woof!"
Salin selepas log masuk

尽管 animal 指向的是 Animal 基类,但由于多态性,它将调用 Dog 对象中的 speak() 方法。

实战案例

考虑一个形状类层次结构,包括 Shape 基类和 CircleSquareTriangle 派生类。

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

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

class Square : public Shape {
public:
    double area() override { return side * side; }
};

class Triangle: public Shape {
public:
    double area() override { return 0.5 * base * height; }
};
Salin selepas log masuk

通过使用继承和多态性,我们可以编写一个 calculateTotalArea()

Sebagai contoh: 🎜
double calculateTotalArea(vector<Shape*>& shapes) {
    double totalArea = 0;
    for (Shape* shape : shapes) {
        totalArea += shape->area();
    }
    return totalArea;
}
Salin selepas log masuk
🎜Dalam contoh ini, kelas Anjing mewarisi kaedah speak() bagi kelas asas Animal dan mengatasi Kaedah untuk menyediakan tingkah laku tertentu. 🎜🎜🎜2. Polimorfisme 🎜🎜🎜Polymorphism merujuk kepada keupayaan untuk memanggil kaedah secara dinamik pada masa jalan berdasarkan jenis objek sebenar. Ia membolehkan penunjuk kelas asas untuk mengakses kaedah dalam objek kelas terbitan. 🎜🎜Polymorphism dalam C++ dicapai melalui jadual fungsi maya. Semasa penyusunan, entri vtable dijana untuk setiap fungsi maya. Apabila penunjuk kelas asas memanggil fungsi maya, ia mencari vtable objek dan kemudian memanggil kaedah yang sesuai. 🎜🎜Contohnya: 🎜rrreee🎜Walaupun haiwan menunjuk ke kelas asas Animal, disebabkan polimorfisme, ia akan memanggil objek Dog speak() kaedah. 🎜🎜🎜Kes praktikal🎜🎜🎜Pertimbangkan hierarki kelas bentuk, termasuk kelas asas Bentuk dan Bulatan, Segi empat dan Segitiga Kelas terbitan. 🎜rrreee🎜Dengan menggunakan warisan dan polimorfisme, kita boleh menulis fungsi calculateTotalArea() yang boleh mengira jumlah luas sebarang bentuk: 🎜rrreee

Atas ialah kandungan terperinci Apakah mekanisme pelaksanaan warisan dan polimorfisme dalam C++?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!