문제

프로그래밍과 관련하여 "과부하"/"과부하"는 무엇을 의미합니까?

도움이 되었습니까?

해결책

이는 동일한 이름이지만 다른 서명이있는 함수 (메소드 또는 연산자)를 제공한다는 것을 의미합니다. 예를 들어:

void doSomething();
int doSomething(string x);
int doSomething(int a, int b, int c);

다른 팁

기본 사상

오버로드 또는 "메소드 오버로드"는 이름이 같지만 매개 변수가 다른 하나 이상의 메소드를 갖는 개념의 이름입니다.

예를 들어 System.dateTime 클래스의 C#에는 둘 이상의 TOSTRING 방법이 있습니다. 표준 Tostring은 시스템의 기본 문화를 사용하여 데이터 타임을 문자열로 변환합니다.

new DateTime(2008, 11, 14).ToString(); // returns "14/11/2008" in America

동일한 방법의 다른 과부하는 사용자가 형식을 사용자 정의 할 수 있습니다.

new DateTime(2008, 11, 14).ToString("dd MMM yyyy"); // returns "11 Nov 2008"

때때로 매개 변수 이름이 동일 할 수 있지만 매개 변수 유형이 다를 수 있습니다.

Convert.ToInt32(123m);

소수점을 int로 변환합니다

Convert.ToInt32("123");

문자열을 int로 변환합니다.

과부하 해상도

호출 할 최상의 오버로드를 찾으려면 컴파일러는 "오버로드 해상도"라는 조작을 수행합니다. 첫 번째 예에서는 컴파일러가 인수 수와 일치하여 최상의 메소드를 찾을 수 있습니다. 두 번째 예제에서는 컴파일러가 소수점 매개 변수를 전달하고 문자열 매개 변수를 전달하는 경우 문자열 버전을 호출하는 경우 소수 버전의 교체 메소드를 자동으로 호출합니다. 가능한 출력 목록에서 컴파운드가 호출 할 적절한 출력을 찾을 수없는 경우 "최고의 오버로드가 매개 변수와 일치하지 않습니다 ..."와 같은 컴파일러 오류가 발생합니다.

당신은 할 수 있습니다 찾기 다른 컴파일러가 과부하 분해능을 수행하는 방법에 대한 많은 정보.

함수는 하나 이상의 서명이있을 때 과부하됩니다. 이것은 다른 인수 유형으로 호출 할 수 있음을 의미합니다. 예를 들어 화면에서 변수를 인쇄하는 기능이있을 수 있으며 다른 인수 유형에 대해이를 정의 할 수 있습니다.

void print(int i);
void print(char i);
void print(UserDefinedType t);

이 경우 함수 print ()에는 세 개의 오버로드가 있습니다.

그것은 다른 유형의 매개 변수를 취하는 동일한 함수의 다른 버전을 갖는 것을 의미합니다. 이러한 함수는 "과부하"됩니다. 예를 들어 다음 기능을 수행하십시오.

void Print(std::string str) {
  std::cout << str << endl;
}

이 기능을 사용하여 문자열을 화면에 인쇄 할 수 있습니다. 그러나 정수를 인쇄 할 때는이 기능을 사용할 수 없습니다. 그런 다음 다음과 같은 두 번째 버전의 기능을 만들 수 있습니다.

void Print(int i) {
  std::cout << i << endl;
}

이제 함수가 과부하되고 함수의 버전이 제공하는 매개 변수에 따라 다릅니다.

다른 사람들은 과부하가 무엇인지 대답했습니다. 당신이 시작할 때 그것은 재정의/재정의와 혼동됩니다.

오버로드와는 달리, 재정의는 하위 클래스 (또는 하위 클래스)에서 동일한 서명이있는 메소드를 정의하는데, 이는 상위 클래스 구현을 무시합니다. 일부 언어에는 다음과 같은 명시 적 지시가 필요합니다 virtual C ++ 또는 멤버 기능 override 델파이와 C#에서.

using System;

public class DrawingObject
{
    public virtual void Draw()
    {
        Console.WriteLine("I'm just a generic drawing object.");
    }
}

public class Line : DrawingObject
{
    public override void Draw()
    {
        Console.WriteLine("I'm a Line.");
    }
}

오버로드 된 방법은 매개 변수의 숫자와 유형에 대한 몇 가지 옵션이있는 방법입니다. 예를 들어:

foo(foo)

foo(foo, bar)

둘 다 상대적으로 동일한 일을하지만 하나는 더 많은 옵션을위한 두 번째 매개 변수가 있습니다.

또한 동일한 방법이 다른 유형을 취할 수 있습니다.

int Convert(int i)
int Convert(double i)
int Convert(float i)

일반적인 사용법과 마찬가지로, 그것은 둘 이상의 작업을 수행하는 무언가 (이 경우 메소드 이름)를 말합니다.

과부하 가난한 사람의 버전입니다 Clos 및 기타 언어의 다중 방법. 혼란스러운 것입니다.

우선 일반적인 oo one입니다. 상속 재산과 함께 진행됩니다. 우리는 그것을 재정의라고합니다 (예 : https://stackoverflow.com/users/3827/eed3si9ns 답변 Line 특수한 정의를 제공합니다 Draw().

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top