오버로딩, 오버라이딩
STUDY/C++2022. 6. 5. 22:15
오버로딩(Overloading) : 함수의 중복 정의
오버로딩이란 같은 이름의 함수를 호출하더라도 매개변수에 따라 다른 함수가 실행되는 것입니다.
간단히 코드로 작성해 보겠습니다.
#include <iostream>
#include <string>
using namespace std;
inline void Test(int iTest) { cout << iTest << endl; }
inline void Test(string strTest){ cout << strTest << endl; }
int main()
{
Test(1);
Test("Hello World!");
return 0;
}
같은 Test라는 함수를 호출하였음에도

매개변수에 따라 1과 Hello World!가 출력이 되므로
같은 이름으로 다른 기능을 사용할 수 있게 됩니다.
예시로 Sum()으로 두 변수를 더하는 함수인데 (int, int), (int, float), (float, float) ... 을 만들고 싶다면
Sum_IntToInt, Sum_IntToFloat 가 아닌 Sum(int *, int *), Sum(int *, float *)와 같이
매개변수를 다르게 하여 활용이 가능하여 다형성의 예로 들수 있습니다.
오버라이딩 : 함수 재정의
오버라이딩이란 상속관계에서 부모클래스의 함수를 사용하지 않고 자신만의 함수로 재정의하여 사용하는 것을 말합니다.
#include <iostream>
using namespace std;
class Parent
{
public:
inline void Test(int iTest) { cout << "Parent : " << iTest << endl; }
};
class Child : public Parent
{
public:
inline void Test(int iTest) { cout << "Child : " << iTest << endl; }
};
int main()
{
Parent P;
Child C;
P.Test(777);
C.Test(777);
return 0;
}

다음과 같이 같은 Test를 호출하였지만 자식은 부모의 Test를 재정의하여
자신만의 Test를 가질수 있게 됩니다.
자식에서의 오버라이딩을 할 때에는
- 메소드(함수)의 이름이 같아야 한다.
- 메소드(함수)의 인자 개수, 자료형이 같아야 한다.
- 리턴형이 같아야 한다.
- 재정의시 구현부가 동일하거나 추가되어야 한다.
- 오버라이드하는 함수가 상위(부모) 클래스에 존재하여야 한다.
위의 조건을 지켜야합니다.
'STUDY > C++' 카테고리의 다른 글
| RTTI(Run Time Type Infomation) (0) | 2022.06.18 |
|---|---|
| 업캐스팅과 다운캐스팅 (0) | 2022.06.14 |
| OOP-객체 지향 프로그래밍 (0) | 2022.05.30 |
댓글()







