> 백엔드 개발 > C++ > 본문

C++ 함수 오버로딩 및 재정의

王林
풀어 주다: 2024-04-12 12:12:02
원래의
928명이 탐색했습니다.

오버로딩과 재정의는 C++에서 다른 개념입니다. 오버로드를 사용하면 다른 매개변수 목록을 사용하여 동일한 이름을 가진 함수를 생성할 수 있으며, 재정의를 사용하면 파생 클래스 함수가 ​​동일한 이름을 가진 기본 클래스 함수를 재정의할 수 있습니다. 오버로딩의 경우 함수 이름은 동일하지만 매개변수 목록이 다릅니다. 재정의의 경우 함수 이름과 매개변수 목록이 동일해야 하며 파생 클래스 함수는 override 키워드를 사용해야 합니다. C++ 함수의 오버로딩과 재정의는 C++의 두 가지 다른 개념입니다. 오버로딩을 사용하면 이름은 같지만 매개변수 목록이 다른 함수를 생성할 수 있으며, 재정의를 사용하면 파생 클래스의 함수가 기본 클래스의 동일한 이름의 함수를 재정의할 수 있습니다.

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

다양한 입력 매개변수를 기반으로 다양한 모양의 면적을 계산하는 area라는 함수가 있다고 가정해 보세요.

int area(int length, int width);  // 矩形面积
double area(double radius);  // 圆形面积
로그인 후 복사

이 함수는 area< /code>를 오버로드합니다. 매개변수 목록이 다르기 때문에 이름을 지정합니다. 다양한 유형의 데이터를 처리하고 다양한 계산을 수행할 수 있습니다. <p><strong></strong>Override</p><p></p>이제 <code>area 가상 함수가 있는 기본 클래스 Shape가 있다고 가정합니다.

class Shape {
public:
    virtual double area() const = 0;
};
로그인 후 복사
파생 클래스 를 생성할 수 있습니다. Rectangle Circle을 사용하고 area 함수를 재정의합니다.
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;  // 圆形属性
};
로그인 후 복사

파생 클래스에서는 override</code를 통해 부모를 명시적으로 재정의합니다. > 키워드 클래스의 <code>area 함수입니다. 재정의된 함수는 상위 함수와 동일한 반환 유형 및 이름을 가져야 합니다.

area 的函数,它根据不同的输入参数计算不同形状的面积:

#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 名称,因为它们有不同的参数列表。它们能够处理不同类型的数据并执行不同的计算。

覆盖

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

矩形面积:15
圆形面积:12.566370614359172
로그인 후 복사

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

rrreee

在派生类中,我们通过 override 关键字显式覆盖父类的 area

실용 사례

오버로딩과 오버라이딩을 보여주는 프로그램을 만듭니다:

rrreee

출력 결과:

rrreee

이 예에서는 오버로딩과 오버라이딩을 통해 다양한 기능을 가진 함수를 만드는 방법을 보여줍니다.

위 내용은 C++ 함수 오버로딩 및 재정의의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿