728x90

오버 로딩(overloading)은 함수 다중 정의를 말합니다. 함수 다중 정의는 함수 하나가 여러 의미를 갖는 것을 말합니다.

 

이름은 같아도 함수를 구성하는 매개변수의 타입이나 개수가 달라지게 되면 다른 함수로 취급이 됩니다.

#include <iostream>

using namespace std;

int add(int num)
{
	return 10 + num;
}
int add(int num1, int num2)
{
	return num1 + num2;
}

int main()
{
	cout << "add(int num)의 결과 = " << add(100); 
	cout << " add(int num1, int num2)의 결과 = " << add(100, 200) << endl;
}
/*
실행결과
add(int num)의 결과 = 110 add(int num1, int num2)의 결과 = 300
*/

매개변수는 같고 반환형만 다른 경우에는 오류가 나게 됩니다. 

#include <iostream>

using namespace std;

int add(int num)
{
	return 10 + num;
} // E0311	반환 형식으로만 구분되는 함수를 오버로드할 수 없습니다.	

double add(int num)
{
	return 10.0 + num;
} // error C2556: 'double add(int)': 오버로드된 함수가 'int add(int)'과(와) 반환 형식만 다릅니다.

int main()
{
	cout << "add(int num)의 결과 = " << add(100); 
}

함수 오버 로딩을 사용할 때 주의해야 할 점은 모호성이 발생할 수 있다는 것을 염두에 두고 사용해야 합니다.

#include <iostream>

using namespace std;

int add(int num)
{
	return 10 + num;
}
int add(int num1, int num2 = 20)
{
	return num1 + num2;
}

int main()
{
	cout << "add(int num)의 결과 = " << add(100); 
    // error C2668: 'add': 오버로드된 함수에 대한 호출이 모호합니다.
}

다음으로 오버 라이딩(overriding)은 부모(기본) 클래스가 있고 상속받은(파생된) 자식(파생) 클래스가 있을 때 자식 클래스에서 부모 클래스에 있는 메서드를 재정의하는 것을 말합니다. 

#include <iostream>

using namespace std;

class parentClass {
public:
	void printData()
	{
		cout << "parentClass" << endl;
	}
};
class childClass_nonover : public parentClass {};
class childClass_doover : public parentClass {
public:
	void printData()
	{
		cout << "childClass" << endl;
	}
};

int main()
{
	parentClass Parent;
	childClass_doover Child_doover;
	childClass_nonover Child_nonover;

	Parent.printData();
	Child_nonover.printData();
	Child_doover.printData();
}
/*
실행결과
parentClass
parentClass
childClass
*/

childClass_nonover 클래스와 childClass_doover 클래스는 parentClass로부터 상속받고, childClass_doover클래스는 printData() 메소드를 재정의(overrride) 해줬습니다.

 

728x90

'Programming > C++' 카테고리의 다른 글

C++ 큰따옴표(") 출력하기  (0) 2020.02.27
C++ 역슬래쉬(\) 출력하기  (0) 2020.02.27
C++ 디폴트 매개변수  (0) 2020.02.06
C++ reference value(참조형 변수)  (0) 2020.02.04
C++ new, delete  (0) 2020.01.20

+ Recent posts