>  기사  >  백엔드 개발  >  C++ 함수 오버로딩과 재작성의 차이점은 무엇입니까?

C++ 함수 오버로딩과 재작성의 차이점은 무엇입니까?

WBOY
WBOY원래의
2024-04-13 18:06:01876검색

C++ 함수 오버로딩 및 재작성: 오버로딩: 동일한 이름을 가진 함수는 매개변수 유형이나 번호가 다르며 컴파일 중에 적절한 버전이 선택됩니다. 재작성: 기본 클래스와 동일한 이름을 가진 파생 클래스의 함수는 기본 클래스 구현을 재정의하고 파생 클래스에 대한 특정 구현을 제공합니다. 오버로딩 특성: 컴파일 타임에 바인딩되는 다양한 매개변수 유형 또는 숫자. 재정의 특성: 동일한 매개변수 유형 및 번호, 런타임 바인딩, 상속이 필요합니다.

C++ 函数重载与重写有何区别?

C++ 함수 오버로딩 및 재작성: 개념과 차이점

Overloading

  • 정의: 함수 이름은 같지만 매개변수 유형이나 숫자가 다른 함수.
  • 의미: 컴파일러는 호출 시 인수 유형이나 숫자를 기반으로 적절한 함수 버전을 선택합니다.
  • 구문:
int sum(int a, int b);
double sum(double a, double b);

Override

  • 정의: 기본 클래스와 이름 및 서명이 동일한 파생 클래스의 함수입니다.
  • 의미: 파생 클래스의 재정의된 함수는 기본 클래스의 동일한 이름의 함수를 재정의하여 파생 클래스의 특정 구현을 제공합니다.
  • 구문:
class Base {
public:
    virtual int add(int a, int b);
};

class Derived : public Base {
public:
    int add(int a, int b) override;
};

Difference

Features Overload Rewrite
액세스 수준 공개 또는 비공개 공개 또는 보호
상속 필요하지 않음 필수
Parameters 다른 매개변수 유형 또는 숫자 동일한 매개변수 유형 및 숫자
Binding 컴파일 시간 런타임
Scope 수업 내에서도 마찬가지 In 기본 클래스와 파생 클래스

실용 사례

오버로드: 다양한 유형의 숫자의 합을 계산합니다.

#include <iostream>

using namespace std;

int sum(int a, int b) {
    return a + b;
}

double sum(double a, double b) {
    return a + b;
}

int main() {
    cout << "整数之和:" << sum(1, 2) << endl;
    cout << "浮点数之和:" << sum(1.5, 2.5) << endl;
    return 0;
}

다시 작성: 다형성을 사용하여 다양한 모양의 면적을 계산합니다.

#include <iostream>

using namespace std;

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

class Rectangle : public Shape {
public:
    Rectangle(double length, double width) : length(length), width(width) {}

    double area() override {
        return length * width;
    }

private:
    double length;
    double width;
};

class Circle : public Shape {
public:
    Circle(double radius) : radius(radius) {}

    double area() override {
        return 3.14 * radius * radius;
    }

private:
    double radius;
};

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

    for (int i = 0; i < 2; i++) {
        cout << "面积:" << shapes[i]->area() << endl;
    }

    return 0;
}

위 내용은 C++ 함수 오버로딩과 재작성의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.