본문 바로가기
Language&Framework&Etc/C++

1-2 함수 오버로딩

by 머리올리자 2020. 11. 18.
#include <iostream>

int func(int num) /* 같은 함수명 */
{
	num++;
	std::cout << "위쪽 함수 호출" << std::endl;
	std::cout << num << std::endl;
	
	return num;
}

int func(int a, int b) /* 같은 함수명 */
{
	std::cout << "위쪽 함수 호출" << std::endl;
	std::cout << a + b << std::endl;
	return a + b;
}

int main(void) {

	func(20); // func(int num) 호출
	func(10, 20); // func(int a, int b) 호출


	return 0;
}

func 동일한 이름으로 함수명 정의

C언어에서는 위와 같이 동일한 이름의 함수가 정의되는 것을 허용하지 않는다. → 컴파일 오류 나옴

 

C++에서는..

[함수 오버로딩]

  • 함수 호출 시, 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능함
  • 매개 변수의 형태가 다르다면, 동일한 이름의 함수 정의를 허용할 수 있음
  • 이를 함수의 오버로딩이라고 함

오버로딩의 의미?

프로그램 작성 언어에서 정수나 식별자, 연산자에 관한 성질로서, 동일한 유효 범위 내에서도 몇 가지 의미를 가질 수 있는 것.

[네이버 지식 백과 참고]

 

다중 정의

다중 정의IT용어사전 프로그램 작성 언어에서 정수(定數)나 식별자, 연산자에 관한 성질로서, 동일한 유효 범위 내에서도 몇 가지 의미를 가질 수 있는 것. 외국어 표기 overloading(영어), 多重定義(

terms.naver.com

함수 오버로드

함수 오버로드(영어: Function overloading)는 다양한 에이다(Ada), C#, C++, 자바(Java) 등의 다양한 프로그래밍 언어에서 사용되는 함수의 특징으로, 같은 함수 이름을 가지고 있으나 매개변수, 리턴타입 등의 특징은 다른 여러개의 서브프로그램 생성을 가능하게 한다. (C언어는 지원하지 않는다)

[위키피디아 참고]

 

함수 오버로드 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 함수 오버로드(영어: Function overloading)는 다양한 에이다(Ada), C#, C++, 자바(Java) 등의 다양한 프로그래밍 언어에서 사용되는 함수의 특징으로, 같은 함수 이름을 가

ko.wikipedia.org


그렇다면 왜 C언어는 왜 함수의 오버로딩을 지원을 안하는가?

함수를 찾을 때 C와 C++ 방식이 다름

 

C++ : 매개 변수 인자로 전달 받을 수 있는 function 이름의 함수를 찾음

C언어 : function부터 찾음


void func(int n)
int func(int n)

위는 오버로딩이 적용되지 않는다

왜?? 함수가 호출되었을 때 입력 인자가 같기 때문에

 

오버로딩 example

#include <iostream>

void func(void)
{
	std::cout << "func(void) called" << std::endl;
}

void func(char c)
{
	std::cout << "func(char c) called" << std::endl;
}
void func(int a, int b)
{
	std::cout << "func(int a, int b) called" << std::endl;
}

int main(void) {
	func();
	func('A');
	func(12, 13);
	return 0;
}

 

참고 : [윤성우 열혈 C++ 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.