#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++에서는..
[함수 오버로딩]
- 함수 호출 시, 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능함
- 매개 변수의 형태가 다르다면, 동일한 이름의 함수 정의를 허용할 수 있음
- 이를 함수의 오버로딩이라고 함
오버로딩의 의미?
프로그램 작성 언어에서 정수나 식별자, 연산자에 관한 성질로서, 동일한 유효 범위 내에서도 몇 가지 의미를 가질 수 있는 것.
함수 오버로드
함수 오버로드(영어: Function overloading)는 다양한 에이다(Ada), C#, C++, 자바(Java) 등의 다양한 프로그래밍 언어에서 사용되는 함수의 특징으로, 같은 함수 이름을 가지고 있으나 매개변수, 리턴타입 등의 특징은 다른 여러개의 서브프로그램 생성을 가능하게 한다. (C언어는 지원하지 않는다)
그렇다면 왜 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++ 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.
'Language&Framework&Etc > C++' 카테고리의 다른 글
1-5 이름공간(namespace)에 대한 소개 추가(함수 선언 정의) (0) | 2020.11.18 |
---|---|
1-5 이름공간(namespace)에 대한 소개 (0) | 2020.11.18 |
1-4 인라인(inline) 함수 (0) | 2020.11.18 |
1-3 매개변수의 디폴드값 (0) | 2020.11.18 |
1. 입출력 방식 (0) | 2020.11.17 |