함수 오버로딩 예제

유도 된 클래스에서 F로 전달 되는 int 매개 변수에 사용 결과 포함 하지 못하면 더블로 변환 되 고 기본 클래스에서 보다는 파생 된 클래스에서 함수를 일치; 파생 클래스에서 오버로드에 결과를 사용하여 기본 클래스의 함수를 일치시면 됩니다. 앞의 코드는 func 함수의 두 정의를 보여 주십니다. 문자 * 형식의 인수를 취하는 정의는 extern 문 때문에 main에 로컬입니다. 따라서 int 형식의 인수를 사용 하는 정의 숨김 및 func에 대 한 첫 번째 호출 오류가 있습니다. float를 단일 매개 변수로 만드는 함수가 없다고 가정 해 봅시다. 이 경우 호출자 테스트 함수를 float 매개 변수를 전달 하는 경우 매개 변수 float는 두 배로 승격 되 고 위의 함수가 호출 됩니다. 긴 에서 두 배로이 승격은 데이터의 손실을 일으키지 않으므로 컴파일러는 직접 일치가 발생하지 않더라도 위에 표시된 함수를 호출합니다. 각 함수에는 고유 한 서명 (또는 헤더)이 파생되어 있습니다 : 함수 오버로드는 이름이 같지만 매개 변수 목록이 다른 두 개 이상의 함수를 가질 수있는 C ++ 프로그래밍 기능입니다. 매개 변수의 시퀀스, 예를 들어 함수 myfuncn(int a, float b)의 파라미터 리스트는 myfuncn 함수 myfuncn(float a, int b) 파라미터 리스트(float, int) 파라미터 리스트와 상이한(int, float)이다. 함수 오버로드는 컴파일 타임 다형성입니다. 이제 매개 변수 목록이 무엇인지 알면 오버로드 규칙을 볼 수 있습니다 : 우리는 동일한 범위에서 다음 함수를 가질 수 있습니다. 오버로드된 함수는 전송되는 데이터의 종류에 따라 다른 작업을 수행하는 것으로 나타납니다.

계정 입금 호출::Deposit는 개인 멤버 함수를 호출합니다. Account::Deposit는 멤버 함수이며 클래스의 개인 멤버에 액세스할 수 있기 때문에 이 호출이 올바르다. 경우에 따라 컴파일러는 매개 변수의 형식과 호출된 함수에 전달되는 순서에 따라 매개 변수를 비교하여 모호성을 해결합니다. 아래 예제를 살펴보십시오: 둘 이상의 함수가 함수 해결 프로세스의 기준과 일치하는 경우 컴파일러에서 모호성 오류가 보고됩니다. 소스 코드를 편집하여 컴파일러에 대한 추가 정보를 추가하면(예: 형식 캐스팅 사용) 이러한 의심을 해결할 수 있습니다. 기본 클래스 함수가 `가상`으로 선언되지 않은 경우 파생 클래스 함수를 숨깁니다. 재정의와 숨기기는 오버로드와 구별됩니다. 예를 들어 std::string 인수를 수행하는 인쇄 함수는 형식 이중 인수를 취하는 것과는 매우 다른 작업을 수행할 수 있습니다. 오버로드는 print_string 또는 print_double과 같은 이름을 사용할 필요가 없습니다. 컴파일 타임에서 컴파일러는 호출자가 전달한 인수 유형에 따라 사용할 오버로드를 선택합니다. print(42.0)를 호출하면 void 인쇄(이중 d) 함수가 호출됩니다.

print(“hello world”)를 호출하면 보이드 인쇄(std:::string) 오버로드가 호출됩니다. 두 함수 모두 하나의 정수와 하나의 부동 점 인수 형식을 사용하기 때문에 다시 “아니오”. 이제 저는 여러분이 스스로 답을 찾아올 수 있다고 믿습니다. 컴파일러는 인수의 순서로 해결합니다. 호출자가 정수를 첫 번째 매개 변수로 전달하고 두 번째 매개 변수로 float하는 경우 컴파일러는 코드를 생성하는 동안 두 번째 함수를 호출해야 한다는 것을 알고 있습니다. 오버로드된 함수 집합의 두 함수에는 서로 다른 인수 목록이 있어야 합니다. 생성자 오버로드를 통해 작성 시 팁과 합계를 매개 변수로 전달할 수 있습니다.