오버로딩과 다형성 (오버로딩은 그냥 다른 datatype 지원 그 자체다.)

2020. 9. 10. 15:05컴퓨터 수업/C++

 @오버로딩

overloading. 과다적재.라는 뜻이다.

하지만 C++ 에선 중복적재라고 이해해야 한다.

객체지향적 프로그래밍에서 중요한 게 뭐라고? 바로 다형성(polymorphism)이다.

다형성 : 프로그램 언어의 각 요소들이 다양한 자료형에 속하는 것이 허가되는 성질을 가리킨다. 

중복적재가 무엇인지 알아보고 이것이 왜 다형성에 부합하는지 알아보자.

 

@코드

void point(int x,int y)
{
cout <<"정수 좌표 "<<"[" << x << "," << y <<"]" << endl;
}
void point(float x,float y)
{
cout <<"실수 좌표 "<<"[" << x << "," << y <<"]" << endl;
}

동일한 함수명 point가 사용되었다.

동일한 함수명 point에 중복으로 사용되었다.

함수가 중복 적재되었다.라는 의미로 받아들여진다.

이게 왜 다형성이지?라는 것은 다형성의 의미 "다양한 자료형에 따라 다양한 결과값을 도출하는것." 이라고 이해하면 좋겠다. 

다양한 자료형을 지원하려면 당연히 중복적재 되어야한다.

 

@함수의 오버로딩 심화

#include <iostream>
using namespace std;

int point(int x)
{
	cout << "int" << endl;
	return x;
}
double point(double x)
{
	cout << "float" << endl;
	return x;
}
int main()
{
	cout << point(3.2) << endl;
}

서로 다른 자료형을 argument로 사용하였다면 출력(return) 값의 datatype이 달라도 된다.

 

#include <iostream>
using namespace std;

int point(int x)
{
	cout << "int" << endl;
	return x;
}
double point(int x)
{
	cout << "float" << endl;
	return float(x);
}
int main()
{
	cout << point(3.2) << endl;
}

서로 다른 자료형이 아니라 같은 자료형을 argument로 사용하였기에 오버로딩이 아니고, 당연히 컴파일도 되지 않는다.

(모호함 문제)

 

즉, 오버로딩은 argument의 수가 다르거나 자료형이 달라야만 한다.

 

@default argument에 대해서는 수업자료를 붙여 넣겠다.

class의 기본 생성자를 코딩할 때, 도움이 될 것.