"과부하"/"과부하"/"과부하"는 무엇을 의미합니까?
-
08-07-2019 - |
문제
프로그래밍과 관련하여 "과부하"/"과부하"는 무엇을 의미합니까?
해결책
이는 동일한 이름이지만 다른 서명이있는 함수 (메소드 또는 연산자)를 제공한다는 것을 의미합니다. 예를 들어:
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()
.