2. [C++] 함수 오버로딩

2024. 4. 11. 11:03[C++]/C++ 언어 기초

함수 오버로딩

int MyFunc(int num)
{
    num++;
    return num    
}

int MyFunc(int a, int b)
{
    return a+b;
}
int main(void){

    MyFunc(20);
    MyFunc(30, 40);
    return 0;
}
  • 함수호출 시 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능하다.
  • C++에서는 매개변수의 선언형태가 다르다면, 동일한 이름의 함수정의를 허용할 수 있다. 이를 "함수 오버로딩"이라고 한다.
C C++
함수의 이름만 이용해 호출 대상을 찾는다. 함수의 이름, 매개변수의 선언으로 판단해 호출 대상을 찾는다.

 

 

함수 오버로딩의 예

int MyFunc(char c){...}
int MyFunc(int n) {...}


int MyFunc(int n){...}
int MyFunc(int n1, int n2){...}
  • 이 경우는 매개변수의 자료형이 다르거나, 매개변수의 개수가 다르므로 구분할 수 있다.
void MyFunc(int n){...}
int MyFunc(int n){...}
  • 하지만 이 예시는 반환형은 다르지만, 매개변수는 같다. 
  • 반환형은 함수 호출 시, 호출되는 함수를 구분하는 기준이 되지 않으므로 컴파일 오류가 발생한다.
#include "stdafx.h"
#include <iostream>

using namespace System;
using namespace std;

void MyFunc(void){
	cout<<"MyFunc(void) Called"<<endl;
}

void MyFunc(char c){
	cout<<"MyFunc(char c) Called"<<endl;
}

void MyFunc(int a, int b){
	cout<<"MyFunc(int a, int b) Called"<<endl;
}

int main(array<System::String ^> ^args)
{
   
  MyFunc();
  MyFunc('A');
  MyFunc(12, 13);

  return 0;
}


문제 풀이

01-2. 다음 main 함수에서 필요로 하는 swap 함수를 오버로딩 해서 구현해보자.

int main(void) {
    int num1=20, num2=30;
    swap(&num1, &num2);
    std::cout<<num1<<' '<<num2<<std::endl;

    char ch1='A', ch2='Z';
    swap(&ch1, &ch2);
    std::cout<<ch1<<' '<<ch2<<std::endl;

    double dbl1=1.111, dbl2=5.555;
    swap(&dbl1, &dbl2);
    std::cout<<dbl1<<' '<<dbl2<<std::endl;
    return 0;
}

 

 

내 풀이

#include "stdafx.h"
#include <iostream>

using namespace System;

void swap(int *num1, int *num2){
	int temp = *num1;
	*num1 = *num2;
	*num2 = temp;
}

void swap(char *ch1, char *ch2){
	char temp = *ch1;
	*ch1 = *ch2;
	*ch2=  temp;
}

void swap(double *dbl1, double *dbl2){
	double temp = *dbl1;
	*dbl1 = *dbl2;
	*dbl2=  temp;
}

int main(array<System::String ^> ^args)
{

	int num1=20, num2=30;
	std::cout<<"스왑 전 : "<<num1<<' '<<num2<<std::endl;
	swap(&num1, &num2);
	std::cout<<"스왑 후 : "<<num1<<' '<<num2<<std::endl<<std::endl;


	char ch1='A', ch2='Z';
	std::cout<<"스왑 전 : "<<ch1<<' '<<ch2<<std::endl;
	swap(&ch1, &ch2);
	std::cout<<"스왑 후 : "<<ch1<<' '<<ch2<<std::endl<<std::endl;

	double dbl1=1.111, dbl2=5.555;
	std::cout<<"스왑 전 : "<<dbl1<<' '<<dbl2<<std::endl;
	swap(&dbl1, &dbl2);
	std::cout<<"스왑 후 : "<<dbl1<<' '<<dbl2<<std::endl;

	return 0;
}

반응형