HANCO
[C++] [02]함수오버로딩 본문
오늘은 함수 오버로딩에 대해 공부해 봅시다.
함수 오버로딩을 공부하기전에 이게 무슨 뜻인지 이해하셔야합니다.
먼저, C언어를 예로 들어보겠습니다.
//C언어에서는 함수중복이 불가능
#include<stdio.h>
int print(int a){ return a+10 };
int print(int a, int b) { return a+b+10; }
C언어에서의 함수는 함수의 이름이 동일하지 않아야 합니다.
그러나 C++언어에서는 동일한 함수의 이름을 명시해주셔도 됩니다. 그렇다면 그 이유가 무엇일까요??
프로그래밍언어에서 함수를 사용하기위해서는 당신이 사용해야할 함수가 무엇인지 호출시 인지가
가능해야합니다. C언어에서는 오버로딩을 지원하지 않기 때문에 동일한 함수의 이름은 무조건 사용이 불가능 하지만,
C++언어에서는 가능합니다.
그 이유는 간단합니다. C++에서는 함수의 기능이 확장되었기 때문입니다.
그렇다면 어떻게 확장되었는지 알아볼까요???
//C++에서 함수중복이 가능
#include<iostream>
using namespace std;
int print(int a) { return a+10; }
int print(int a, int b) { return a+b+10; }
int print(int a, int b, int c) { return a*b+c+10; }
int main()
{
int num = 100;
int num2 = 200;
int num3 = 30;
cout<<print(num)<<endl;
cout<<printf(num, num2)<<endl; //모두 같은 print()함수를 사용하고 있지만 매개변수의 개수가 다르기때문에
cout<<print(num, num2, num3)<<endl; //컴파일러는 다른 함수라고 인지하여 오류가 나지 않는다.
}
문제의 깊은 이해를 위해 열혈 C++프로그래밍 문제 01-2[함수 오버로딩]을 풀어볼게용~~
[문제] 다음 main() 함수에서 필요로 하는 swap()함수를 오버로딩 해서 구현해보자.
int main()
{
int num1 = 20, num2 = 30;
swap(&num1, &num2);
cout<<num1<<' '<<num2<<endl;
char ch1 = 'A', ch2 = 'Z';
swap(&ch1, &ch2);
cout<<ch1<<' '<<ch2<<endl;
double dbl1 = 1.111, dbl2 = 5.555;
swap(&dbl1, &dbl2);
cout<<dbl1<<' '<<dbl2<<endl;
}
[실행의 예]
30 20
Z A
5.555 1.111
* 좀전에 우리는 같은 타입에서 매개변수의 개수가 달랐을때의 오버로딩을 배워보았는데 위의 문제를 보면 매개변수의 개수가 같아도
타입이 다르면 오버로딩이 일어날 수 있다는걸 알게 됩니다.
[정답]
//각 타입에 따라 위치를 바꿔주는 것만 해주면 됩니다.
void swap(int *n1, int *n2)
{
int *temp;
temp = *n;
*n = &n2;
*n2 = temp;
}
void swqp(char *s1, char *s2)
{
char *temp;
temp = *s1;
*s2 = *s1;
*s1 = temp;
}
void double(double *d1, double *d2)
{
double *temp;
temp = *d1;
*d2 = *d1;
*d1 = temp;
}
이렇게 간단하게 오버로딩에 대한 설명을 마치겠습니다. 궁금하신점은 댓글에 남겨주세요
'Programming > C++' 카테고리의 다른 글
[C++] [01] 입출력 방식 (2) | 2016.12.20 |
---|