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 |