오버로딩(Overloading) : 같은 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술
오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용
오버로딩(Overloading)
오버로딩은 메서드 오버로딩과 생성자 오버로딩이 있습니다. 하지만 둘 다 같은 개념이에요.
같은 이름의 함수(메서드)를 여러개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있게됩니다.
예제 코드)
class OverloadingTest
{
public:
void testfunc()
{
cout << "no param" << endl;
}
void testfunc(int a, int b)
{
cout << "param : " << a << ", " << b <<endl;
}
void testfunc(string s, int b)
{
cout << "param : " << s << ", " << b << endl;
}
};
int main()
{
OverloadingTest *ot = new OverloadingTest();
ot->testfunc();
ot->testfunc(1,2);
ot->testfunc("test", 3);
return 0;
}
{
public:
void testfunc()
{
cout << "no param" << endl;
}
void testfunc(int a, int b)
{
cout << "param : " << a << ", " << b <<endl;
}
void testfunc(string s, int b)
{
cout << "param : " << s << ", " << b << endl;
}
};
int main()
{
OverloadingTest *ot = new OverloadingTest();
ot->testfunc();
ot->testfunc(1,2);
ot->testfunc("test", 3);
return 0;
}
위와 같이 같은 함수의 이름을 여러번 만들지만 전달해주는 매개변수의 차이로 다른 함수가 될 수 있습니다.
실행결과)
no param
param : 1, 2
param : "test", 3
param : 1, 2
param : "test", 3
이렇게 나오게 됩니다.
매개변수에 알맞는 함수를 호출해주게 됩니다.
--------------------------------------------------------------------------------------------------
오버라이딩(Overriding)
상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것처럼 상위 클래스가 가지고 있는 메서드도 하위 클래스로 상속되어 하위 클래스에 사용할 수 있습니다. 또한, 하위 클래스에서 메서드를 재정의해서도 사용할 수 있습니다.
쉽게 말해 메서드의 이름이 서로 같고, 매개변수가 같고, 반환형이 같을 경우에 상속받은 메서드를 덮어쓴다고 생각하시면 됩니다. ' 부모클래스의 메서드는 무시하고, 자식 클래스의 메서드 기능을 사용하겠다'와 같습니다.
예제 코드)
class Car
{
public :
string name;
int create_year;
void showinfo()
{
cout << "name : " << name << ", create year : " << create_year << endl;
}
};
class Bus : public Car
{
public :
int person_count;
void showinfo()
{
Car::showinfo();
cout << "person_count : " << person_count << endl;
}
};
int main()
{
Bus *b = new Bus();
b->name = "bus";
b->create_year = 2019;
b->person_count = 45;
b->showinfo();
return 0;
}
실행결과)
name : "bus", create year : 2019
person_count : 45
bus클래스가 car클래스를 상속 받아 showinfo() 함수를 재정의 해주면서 부모의 함수를 재정의 된 함수에서 호출 ( Car::showinfo(); )을 해줌으로써 name과 create_year의 정보가 같이 나올 수 있게 됩니다.
오버로딩(Overloading)과 오버라이딩(Overriding) 성립조건
구분
|
오버로딩
|
오버라이딩
|
메서드 이름
|
동일
|
동일
|
매개변수, 타입
|
다름
|
동일
|
리턴 타입
|
상관없음
|
동일
|
출처: https://private.tistory.com/25 [공부해서 남 주자] (코드 제외)