본문 바로가기

교육 노트/C++ 기초강의

[C++ 때려 잡기] C++ 기초강의 2-2 함수 오버로딩

2018/08/24 - [교육 노트/C++ 기초강의] - [C++ 때려 잡기] C++ 기초강의 2-1 함수의 선언과 정의


앞에서 함수를 정의 하는 방법을 배웠다


예를 들어 2개의 매개변수를 더하는 결과를 돌려주는 함수를


int plus(int x, int y)

{

return x + y;

}

과 같이 짯을것이다.

ps. "plus"이 모호합니다 같은 오류가 발생하면 함수이름을 바꾸어주도록하자.


해당함수는 int형식의 변수 2개를 받아 두개의 합인 int값을 돌려주는 과정을 거치된다.


그런데 여기에 매개변수로 int 대신에 float타입을 넣으면 어떻게 될까?

plus(3.5,5.5) 와 같이 사용하게 되면 3.5 와 5.5 가 넘어갈때 묵시적으로 int형으로 형변환이 되고

plus(3,5) 와 같이 작동한다.

즉 원하는값은 9인데 8이 리턴될것이다.


따라서 float를 매개변수로 가지는 다른 plus함수를 제작해야할것이다.

int intPlus(int x, int y)
{
  return x + y;
}
float floatPlus(float x, float y)
{
  return x + y;
}

이런식으로 사실상 같은 기능 기대하는 함수를 제작할때

함수의 이름이 달라지게 된다.


그럴때를 위하여  C++은 함수 오버로딩이라는 기능을 제공한다.


1. 함수 오버로딩

함수 오버로딩은 같은 이름을 가지는 다른 동작을 하는 함수를 의미한다.



다음과 같이 모두 같은 plus 란 이름을 가진 함수이지만 매개변수와 리턴값이 다른 함수를 제작 할 수 있다.

#include <iostream>
using namespace std;
int Plus(int x, int y);
float Plus(float x, float y);
char Plus(char x, char y);
double Plus(double x, double y);
int main()
{
  cout << Plus(3.5, 5.5) << endl;
  cout << Plus(3, 5) << endl;
  cout << Plus((float)3.5, (float)5.5) << endl;
  cout << Plus((char)65, (char)32) << endl;
  //return 0;
}


int Plus(int x, int y)
{
  return x + y;
}
float Plus(float x, float y)
{
  return x + y;
}
char Plus(char x, char y)
{
  return x + y;
}
double Plus(double x, double y)
{
  return x + y;
}


다음과같이 매개변수의 타입에 맞게 알아서 동작하게 된다.



2. 함수 오버로딩방법

1 .함수의 이름을 같게 한다
2. 각각의 함수의 파라미터를 다르게 한다.
-> 파라미터가 같으면 구분을 할 수가 없다

같은 파라미터라면 안되는 이유는 조금만 생각해보면 당연한것이다.

컴퓨터가 두개중 무엇을사용해야하는지 알수 없기 때문이다.


728x90