C ++의 함수 오버로딩 : 알아야 할 모든 것



이 기사에서는 이해해야 할 많은 예제와 함께 C ++의 함수 오버로딩에 대한 상세하고 포괄적 인 지식을 제공합니다.

C ++는 매우 유연한 프로그래밍 언어 중 하나이며 객체 지향 프로그래밍의 여러 기능도 포함합니다. 오버로딩은이 프로그래밍 언어의 또 다른 기능입니다.다음 포인터는이 'C ++의 함수 오버로딩'기사에서 다룰 것입니다.

C ++ 오버로딩

이름은 같지만 매개 변수의 수나 유형이 다른 클래스의 멤버를 둘 이상 만들 때이를 C ++ 오버로딩이라고합니다. C ++에서는 다음과 같이 오버로드 할 수 있습니다.





  • 행동 양식,
  • 생성자 및
  • 인덱싱 된 속성

C ++의 오버로딩 유형

types-of-overloading-in-c++

C ++에서 함수 오버로딩이란 무엇입니까?

C ++의 함수 오버로딩은 이름은 같지만 매개 변수가 다른 클래스의 멤버 함수를 두 개 이상 갖는 프로세스로 정의 할 수 있습니다. 함수 오버로딩에서 함수는 요구 사항에 따라 다른 유형의 인수 또는 다른 수의 인수를 사용하여 재정의 할 수 있습니다. 컴파일러는 이러한 차이를 통해서만 두 개의 오버로드 된 함수를 구별 할 수 있습니다.



함수 오버로딩의 주요 장점 중 하나는 동일한 작업에 대해 다른 이름을 반복해서 사용할 필요가 없기 때문에 프로그램의 가독성을 높여 준다는 것입니다.

인수 수 변경

이러한 함수 오버로딩 방식으로 이름은 같지만 동일한 유형의 매개 변수 수가 다른 두 함수를 정의합니다. 예를 들어, 아래에 언급 된 프로그램에서 두 개의 add () 함수를 만들어 두 개와 세 개의 정수의 합을 반환했습니다.

// 첫 번째 함수 정의 int add (int a, int b) {cout<< a+b } // second overloaded function definition int add(int a, int b, int c) { cout << a+b+c }

여기서 add () 함수는 두 개의 정의를 가지고 있기 때문에 오버로드되었다고합니다. 하나는 두 개의 인수를 받아들이고 다른 하나는 세 개의 인수를받습니다. 호출 할 add () 함수는 인수의 수에 따라 다릅니다.



파이썬을 배워야하는 이유
int main () {add (10, 20) // 매개 변수가 2 개인 add ()는 add (10, 20, 30)이 호출됩니다. // 3 매개 변수가있는 sum ()이 호출됩니다.}
#include using namespace std int add (int a, int b) {cout<< a+b <

위의 예제에서는 인수 개수를 변경하여 add () 함수를 오버로드합니다. 먼저 두 개의 매개 변수로 add () 함수를 정의한 다음 다시 add () 함수를 정의하여 오버로드하지만 이번에는 세 개의 매개 변수를 사용합니다.

다른 유형의 인수를 가짐으로써

이 방법에서는 이름과 매개 변수 수가 같은 두 개 이상의 함수를 정의하지만 이러한 매개 변수에 사용되는 데이터 유형이 다릅니다. 예를 들어이 프로그램에는 세 개의 add () 함수가 있습니다. 첫 번째는 두 개의 정수 인수를, 두 번째는 두 개의 부동 인수를, 세 번째는 두 개의 이중 인수를 얻습니다.

#include using namespace std int add (int x, int y) // first definition {cout<< x+y << endl return 0 } float add(float a, float b) { cout << a+b << endl return 0 } double add(double x, double y) { cout << x+y << endl return 0 } int main() { add(20, 40) add(23.45f, 34.5f) add(40.24, 20.433) }

위의 예에서는 add () 함수를 세 번 정의합니다. 먼저 정수를 매개 변수로 사용하고, 두 번째는 float를 매개 변수로 사용하고, 세 번째는 double을 매개 변수로 사용합니다.
따라서 우리는 add () 함수를 두 번 재정의합니다.

C ++에서 함수 오버로딩의 장점

  • 우리는 프로그램의 메모리 공간, 일관성 및 가독성을 절약하기 위해 함수 오버로딩을 사용합니다.

  • use function overloading 개념을 사용하면 같은 이름으로 둘 이상의 함수를 개발할 수 있습니다.

  • 함수 오버로딩은 같은 이름의 함수를 사용하는 링크가있을지라도 다른 동작을 얻을 수있는 다형성의 동작을 보여줍니다.

  • 함수 오버로딩은 프로그램 실행 속도를 높입니다.

  • 함수 오버로딩은 코드 재사용 및 메모리 절약을 위해 사용됩니다.

  • 매개 변수 유형에 따라 애플리케이션이 클래스 메소드를로드하도록 도와줍니다.

  • 코드 유지 관리가 쉽습니다.

C ++에서 함수 오버로딩의 단점

  • 반환 형식 만 다른 함수 선언은 함수 오버로딩 프로세스로 오버로드 할 수 없습니다.
  • 동일한 매개 변수 또는 동일한 이름 유형을 가진 멤버 함수 선언은 정적 멤버 함수로 선언 된 경우 오버로드 할 수 없습니다.
  • class XYZ {static void func () void func () // 오류}

함수 오버로딩 및 모호성

컴파일러가 오버로드 된 함수 중에서 먼저 호출해야하는 함수를 결정할 수없는 경우 이러한 상황을 함수 오버로드 모호성이라고합니다. 컴파일러는 모호성 오류를 표시하는 경우 프로그램을 실행하지 않습니다. 함수 오버로딩 모호성의 원인 :

  • 유형 변환.
  • 기본 인수가있는 함수입니다.
  • 참조에 의한 전달 기능

유형 변환 :

#include using namespace std void function (float) void function (int) void function (float x) {std :: cout<< 'Value of x is : ' <

위의 예에서는 '과부화 된‘함수 (더블)’호출이 모호합니다.'라는 오류가 발생합니다. function (3.4)는 첫 번째 함수를 호출합니다. function (34)은 우리의 예측에 따라 두 번째 함수를 호출합니다. 그러나 이것은 C ++에서 모든 부동 소수점 상수가 부동 소수점이 아닌 이중으로 처리되기 때문에 발생하지 않습니다. float 변수를 double 변수로 바꾸면 프로그램이 잘 작동합니다. 따라서 이것을 float에서 double 로의 유형 변환 오류라고합니다.

기본 인수가있는 함수 :

#include using namespace std void function (int) void function (int, int) void function (int x) {std :: cout<< 'Value of x is : ' <

위의 예에서는 '과부화 된‘fun (int)’호출이 모호합니다.'라는 오류가 발생합니다. 이는 function (int y, int z = 12)를 두 가지 방법으로 호출 할 수 있기 때문입니다.

자바에서 로그 파일을 만드는 방법
  1. 하나의 인수로 함수를 호출하면 자동으로 z = 12의 값을받습니다.
  2. 두 개의 인수로 함수를 호출합니다.

function : function (12) 함수를 호출 할 때 function (int) 및 function (int, int) 모두의 조건을 완전히 채 웁니다. 따라서 컴파일러는 모호함으로 인해 오류를 표시합니다.

참조에 의한 전달 기능

#include using namespace std void function (int) void function (int &) void function (int a) {std :: cout<< 'Value of a is : ' < 

위 프로그램은“과부화 된‘fun (int &)’호출이 모호하다”는 오류를 발생시킵니다. 첫 번째 함수는 하나의 정수 인수를 취하고 두 번째 함수는 참조 매개 변수를 인수로 취합니다. 이 경우 컴파일러는 fun (int)과 fun (int &) 사이에 구문상의 차이가 없기 때문에 사용자가 어떤 함수를 필요로하는지 이해할 수 없으므로 모호성의 오류가 발생합니다.

이것으로 우리는 C ++에서이 함수 오버로딩을 끝냅니다. 자세한 내용은 다음을 확인하십시오. 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 제공합니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다.

질문이 있으십니까? 이 블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 답변을 드리겠습니다.