HANCO

[C++] [02]함수오버로딩 본문

Programming/C++

[C++] [02]함수오버로딩

HANCO 2016. 12. 22. 00:33

오늘은 함수 오버로딩에 대해 공부해 봅시다.


함수 오버로딩을 공부하기전에 이게 무슨 뜻인지 이해하셔야합니다.

먼저, 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