Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Fungsi C++ melebihkan dan mengatasi

Fungsi C++ melebihkan dan mengatasi

王林
王林asal
2024-04-12 12:12:02876semak imbas

Melebihi beban dan mengatasi adalah konsep yang berbeza dalam C++. Overloading membenarkan penciptaan fungsi dengan nama yang sama, dengan senarai parameter yang berbeza, manakala overriding membenarkan fungsi kelas terbitan untuk mengatasi fungsi kelas asas dengan nama yang sama. Dalam overloading, nama fungsi adalah sama tetapi senarai parameter adalah berbeza, dalam mengatasi nama fungsi dan senarai parameter mestilah sama dan fungsi kelas terbitan mesti menggunakan kata kunci override. Overloading dan overriding fungsi C++ adalah dua konsep berbeza dalam C++. Overloading membenarkan penciptaan fungsi dengan nama yang sama tetapi senarai parameter yang berbeza, manakala overriding membenarkan fungsi dalam kelas terbitan untuk mengatasi fungsi dengan nama yang sama dalam kelas asas. . nama kerana mereka mempunyai senarai parameter yang berbeza. Mereka dapat memproses jenis data yang berbeza dan melakukan pengiraan yang berbeza.

C++ 函数的重载和覆盖Override

Sekarang, andaikan kita mempunyai kelas asas Bentuk, yang mempunyai fungsi maya kawasan:

int area(int length, int width);  // 矩形面积
double area(double radius);  // 圆形面积

Kita boleh mencipta kelas turunan Segi empat tepat dan Bulatan dan mengatasi fungsi kawasan:

class Shape {
public:
    virtual double area() const = 0;
};
Dalam kelas terbitan, kami secara eksplisit mengatasi induk melalui override kata kunci Fungsi kawasan kelas. Fungsi yang diganti mesti mempunyai jenis dan nama pulangan yang sama seperti fungsi induk.

Kes praktikal

Kami mencipta program untuk menunjukkan lebihan muatan dan mengatasi:

class Rectangle : public Shape {
public:
    double area() const override { return length * width; }
    int length, width;  // 矩形属性
};

class Circle : public Shape {
public:
    double area() const override { return Math.PI * radius * radius; }
    double radius;  // 圆形属性
};

Hasil keluaran:

#include <iostream>
#include <cmath>

using namespace std;

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

class Rectangle : public Shape {
public:
    double area() const override { return length * width; }
    int length, width;
};

class Circle : public Shape {
public:
    double area() const override { return Math.PI * radius * radius; }
    double radius;
};

int main() {
    // 创建矩形对象
    Rectangle rectangle;
    rectangle.length = 5;
    rectangle.width = 3;

    // 创建圆形对象
    Circle circle;
    circle.radius = 2;

    // 计算并输出矩形和圆形的面积
    cout << "矩形面积:" << rectangle.area() << endl;
    cout << "圆形面积:" << circle.area() << endl;
}
area 的函数,它根据不同的输入参数计算不同形状的面积:

矩形面积:15
圆形面积:12.566370614359172

这些函数重载了 area 名称,因为它们有不同的参数列表。它们能够处理不同类型的数据并执行不同的计算。

覆盖

现在,假定我们有一个基类 Shape,它有一个 area 虚拟函数:

rrreee

我们可以创建派生类 RectangleCircle,并覆盖 area 函数:

rrreee

在派生类中,我们通过 override 关键字显式覆盖父类的 areaContoh ini menunjukkan cara mencipta fungsi dengan fungsi yang berbeza melalui lebihan dan overriding.

Atas ialah kandungan terperinci Fungsi C++ melebihkan dan mengatasi. 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