Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah warisan digunakan untuk membina hierarki kelas dalam C++?

Bagaimanakah warisan digunakan untuk membina hierarki kelas dalam C++?

WBOY
WBOYasal
2024-06-04 15:11:09885semak imbas

C++ Inheritance digunakan untuk membina hierarki kelas, di mana kelas baharu (kelas terbitan) mewarisi fungsi daripada kelas asas dan melanjutkan fungsinya. Kelas terbitan menggunakan penentu akses untuk mengisytiharkan perhubungan warisan dan mengawal akses kepada ahli kelas asas. geran awam akses kepada kelas terbitan dan kod luaran, geran dilindungi akses kepada kelas terbitan dan kelas terbitannya, dan geran persendirian akses kepada kelas terbitan sahaja. Dengan mencipta kelas terbitan dan mengatasi fungsi maya tulen kelas asas, kelas terbitan boleh melaksanakan fungsi tersuai, seperti pelaksanaan Rectangle dan Bulatan dalam contoh untuk mengira luas bentuk tertentu.

C++ 中继承如何用于构建类层次结构?

Warisan dalam C++: Membina Hierarki Kelas

Preface

Warisan ialah konsep asas dalam pengaturcaraan berorientasikan objek yang membolehkan penciptaan kelas baharu daripada kelas sedia ada. Dalam C++, warisan boleh digunakan untuk membina hierarki kelas di mana setiap kelas mewarisi daripada kelas asasnya dan mungkin memperluaskan fungsinya.

Syntax

Untuk mewarisi daripada kelas asas, kelas baharu (kelas terbitan) mesti diisytiharkan menggunakan awam, dilindungi atau peribadi kod> akses perhubungan warisan penentu. Sintaks adalah seperti berikut: publicprotectedprivate 访问说明符声明继承关系。语法如下:

class 派生类 : 访问说明符 基类 {
    // 派生类成员
};
  • 访问说明符控制派生类对基类成员的访问权限:

    • public:允许派生类和外部代码访问基类成员。
    • protected:允许派生类及其派生类访问基类成员。
    • private:只允许派生类访问基类成员。

实战案例

考虑一个描述几何形状的类层次结构:

class Shape {
public:
    virtual double getArea() const = 0; // 纯虚函数
};

class Rectangle : public Shape {
public:
    Rectangle(double width, double height) : _width(width), _height(height) {}
    double getArea() const override { return _width * _height; }
private:
    double _width, _height;
};

class Circle : public Shape {
public:
    Circle(double radius) : _radius(radius) {}
    double getArea() const override { return 3.14159 * _radius * _radius; }
private:
    double _radius;
};

示例

在此示例中,Shape 是形状类的基类,它包含一个纯虚函数 getArea(),这意味着必须在所有派生类中实现它。

  • Rectangle 是一个从 Shape 继承的矩形类,它覆盖了 getArea() 函数以计算矩形的面积。
  • Circle 是另一个从 Shape 继承的圆类,它也覆盖了 getArea() 函数以计算圆的面积。

要使用这个类层次结构,我们可以创建 RectangleCircle 对象并调用 getArea()

int main() {
    Rectangle rectangle(2.0, 3.0);
    cout << "Rectangle area: " << rectangle.getArea() << endl;
    Circle circle(5.0);
    cout << "Circle area: " << circle.getArea() << endl;
    return 0;
}

  • Penentukan akses mengawal hak akses kelas terbitan kepada ahli kelas asas:

    • awam: dibenarkan kelas Terbitan dan ahli kelas asas akses kod luaran.
    • dilindungi: Membenarkan kelas terbitan dan kelas terbitannya mengakses ahli kelas asas.
    • peribadi: Hanya kelas terbitan dibenarkan untuk mengakses ahli kelas asas.
Contoh Praktikal🎜🎜Pertimbangkan hierarki kelas yang menerangkan bentuk geometri: 🎜
Rectangle area: 6
Circle area: 78.5398163397
🎜Contoh🎜🎜Dalam contoh ini, Bentuk Adalah kelas asas kelas bentuk, ia mengandungi fungsi maya tulen getArea(), yang bermaksud bahawa ia mesti dilaksanakan dalam semua kelas terbitan. 🎜
  • Rectangle ialah kelas segi empat tepat yang diwarisi daripada Shape, yang mengatasi fungsi getArea() untuk mengira luas ​sebuah segi empat tepat.
  • Kalangan ialah satu lagi kelas bulatan yang diwarisi daripada Shape, yang turut mengatasi fungsi getArea() untuk mengira kawasan kalangan.
🎜Untuk menggunakan hierarki kelas ini, kita boleh mencipta objek Rectangle dan Circle dan memanggil fungsi getArea() :🎜rrreee🎜Output:🎜rrreee

Atas ialah kandungan terperinci Bagaimanakah warisan digunakan untuk membina hierarki kelas dalam C++?. 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