C++의 함수 오버로딩
실제 코드 작성에서 동일한 기능 함수가 다른 객체 유형을 처리할 수 있으므로 함수를 다시 구현해야 하며 이로 인해 코드가 더 복잡해집니다. 이 문제를 해결하기 위해 C++에서는 함수 오버로드를 지원합니다. .
예를 들어, 산술 합계 문제의 경우 들어오는 데이터를 수신하고 합산하도록 함수를 사용자 정의해야 합니다. 그러나 독립 모듈로서 호출자가 어떤 유형의 데이터를 전달했는지 어떻게 알 수 있습니까? 정수 데이터일 수도 있고, 물론 부동 소수점 형태의 데이터일 수도 있고, 정수와 부동 소수점 형태일 수도 있다(어느 것이 정수형이고 어느 것이 부동 소수점형인지는 아직 알 수 없다). 포괄적인 접근 방식은 다양한 형식 매개변수 함수 유형을 사용하는 것입니다. 즉, 두 개의 int 유형, 두 개의 double 유형, 첫 번째 int 및 두 번째 double, 첫 번째 double 및 두 번째 int 등 4개의 함수를 정의해야 합니다. 예를 들어 구현에 따르면 이름은 Add_double_double(), Add_int_double(), Add_int_int(), Add_double_int() 등입니다. 혼란스럽지 않습니까?
그러다가 C++에서 등장한 함수 오버로딩은 이 문제를 매우 잘 해결합니다. 함수 오버로딩 은 함수 이름은 같지만 매개변수 유형이나 개수가 다른 두 개 이상의 함수를 의미하며, 매개변수의 유형과 개수에 따라 가장 적합한 함수가 자동으로 선택됩니다. 바인딩 호출의 경우 선택이 자동으로 구현됩니다.
예를 들어, 지금 추가 예제에서는 다음과 같습니다.
#include<iostream>usingnamespacestd;intadd(inta,intb){cout<<(int,int)t;returna+b;}doubleadd(doublea,doubleb){cout<<(doble,double)t;returna+ b ;}doubleadd(doublea,intb){cout<<(double,int)t;returna+b;}doubleadd(inta,doubleb){cout<<(int,double)t;returna+b;}intmain( ){cout<<추가(2,3)<<endl;cout<<추가(2.9,15.3)<<endl;cout<<추가(10,9.9)<<endl;cout<<추가(11.5,5) <<endl;return0;}
실행 결과는 다음과 같습니다.
어떤 함수가 실행되는지 확인하기 위해 코드를 주의 깊게 읽어보고 어떤 함수가 호출되는지 구별하기 위해 함수 내부에 cout 출력 문을 추가합니다.
코드를 이해하려면 누구나 스스로 실험해야 합니다!