함수 오버로딩

sz L·2023년 3월 21일
0

C++

목록 보기
2/40
post-thumbnail

C언어에서는 동일한 이름의 함수가 정의되는 것을 허용하지 않는다.
하지만 C++에서는 함수호출 시 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능하기 때문에 C++에서는 동일한 이름의 함수정의를 허용할 수 있다.
이러한 형태의 함수정의를 함수 오버로딩이라 한다.
다중 정의라고도 한다

함수 오버라이딩이랑 헷갈릴 수 있지만
함수 오버라이딩은 함수의 재정의라고 한다.
상속에서의 중요한 기능 중 하나이다.

힘수 오버로딩 : 다중 정의

함수 오버라이딩 : 함수의 재정의(상속에서 사용)


함수 오버로딩

함수 이름, 매개변수의 타입으로 함수를 구분지음
(C언어에선 오로지 함수 이름으로만 함수를 구분지음)

#include <iostream>

using namespace std;
void MyFunc();
void MyFunc(char c);
void MyFunc(int a, int b);

int main()
{
	MyFunc();
	MyFunc('A');
	MyFunc(12,13);

	return 0;
}

void MyFunc()
{
	cout << "MyFunc() called" << endl;
}
void MyFunc(char c)
{
	cout << "MyFunc(char c) called\n" << "C = " << c << endl;
}
void MyFunc(int a, int b)
{
	cout << "MyFunc(int a,int b) called" << endl;
	cout << "a = " << a << "\nb = " << b << endl;
}


매개변수의 디폴트 값

C++의 함수에선 디폴트 값을 설정할 수 있다.

  • 디폴트 값은 선언부분에서만 표현하면 됨
  • 반드시 오른쪽 매개변수의 디폴트 값부터 채우는 형태로 정의해야 함
#include <iostream>
using namespace std;

int Adder(int num1 = 5, int num2 = 10);

int main()
{
	cout << Adder() << endl;
	cout << Adder(1) << endl;
	cout << Adder(1, 2) << endl;

	return 0;
}

int Adder(int num1, int num2)
{
	return num1 + num2;
}

Adder()은 매개변수가 하나도 전달되지 않아서 디폴트 값은 5와 10이 더해져 15가 반환된다.
Adder(1)은 매개변수가 하나 전달되는데 이때 1은 num1에 전달되어서 1+10이 즉 11이 반환된다.
Adder(1, 2)은 순서대로 num1 = 1, num2 = 2가 전달되어 3이 출력된다.


함수템플릿

함수 템플릿은 함수를 만드는 도구를 의미한다.
함수를 만드는 도구는 무엇으로 이뤄져서 만들지는 정하지는 않는다.

그래서 함수 템플릿이 만들어 내는 함수의 자료형도 결정되어 있지 않는다.

#include <iostream>
#include <cstring>

using namespace std;

template <typename T>
T Adder(T n1, T n2)
{
	return n1 + n2;
}

int main() {
	cout << Adder<int>(1, 2) << endl;
	cout << Adder<double>(1.5, 2.5) << endl;
	cout << Adder<int>(1.5, 2.5) << endl;
	cout << Adder<double>(3.15, 2.75) << endl;

	return 0;
}

profile
가랑비는 맞는다 하지만 폭풍은 내 것이야

0개의 댓글