[C++ 언어-막코딩] 9장 오버로딩과 오버라이딩
- 다운 사이트 : https://sourceforge.net/projects/orwelldevcpp/
- 웹컴파일러 : https://www.tutorialspoint.com/compile_c_online.php
오버로딩은 2이상의 동일한 함수명이면서 함수의 인자가 서로 다를 때 이 경우를 말합니다. 오버라이딩은 부모클래스와 상속받는 자식클래스의 동일한 함수가 있을 때 부모클래스의 함수가 자식클래스의 함수로 재정의되는 상황을 말합니다. 설명이 좀 어렵게 되었는데 실제 코딩해보고 결과를 보시면 쉽게 이해 하실 수 있을거에요.
그럼 알아볼까요.
1. 오버로딩 함수
int add(int a, int b){
return a+b;
}
float add(float a, float b){
return a+b;
}
int add(int a, int b, int c){
return a+b+c;
}
위와 같이 동일한 add()함수기 있고 인자만 다른 형태일 때 이 add()함수는 오버로딩 함수라고 합니다. 위 코딩을 보시면 자료형이 다른 경우와 인자가 다른 경우로 나누어 지는데 같은 add()함수이지만 서로 다른 함수로서 접근하게 됩니다.
s=add(1,2);
s=add(1.2, 1.3);
s=add(1,2,3);
이렇게 접근하게 되면 3개의 add()함수에 인자의 자료형이나 인자의 수가 동일한 함수를 호출하면 add()함수의 동작을 수행합니다. 이런 add()함수들을 오버로딩 함수라고 부릅니다.
2. 오버라이딩 함수
부모클래스에 선언 된 함수가 자식클래스에서 동일한 함수가 있을 때 자식클래스의 함수가 우선권을 가지며 해당 함수는 자식클래스의 함수 호출로 동작을 수행하게 됩니다.
class AAA{
public:
void output(){
cout<<"AAA class"<<endl;
}
};
class BBB: public AAA{
public:
void output(){
cout<<"AAA->BBB class"<<endl;
}
};
이렇게 코딩이 되어 있다면 AAA 클래스의 output()함수가 BBB 클래스에 상속하게 됨으로 BBB 클래스의 output()함수로 재정의 하게 됩니다. output()함수 호출시 BBB클래스 output()함수가 호출됩니다. 이런 형태를 오버라이딩 함수라고 부릅니다.
3. 코딩
오버로딩과 오버라이딩 함수에 대해 예를 들어 설명했는데 실제 설명대로 동작하는지 알아 볼까요.
[오버로딩 함수]
#include <iostream>
using namespace std;
class AAA {
public:
int add(int a, int b){
return a+b;
}
int add(int a, int b,int c){
return a+b+c;
}
float add(float a, float b){
return a+b;
}
};
int main(int argc, char** argv) {
AAA op1;
cout<<op1.add(1,2)<<endl;
cout<<op1.add(1,2,3)<<endl;
cout<<op1.add(1.1f,2.2f)<<endl;
return 0;
}
[결과]

[오버라이딩 함수]
#include <iostream>
using namespace std;
class AAA {
public:
void output(){
cout<<"AAA class!"<<endl;
}
};
class BBB : public AAA {
public:
void output(){
cout<<"BBB class!"<<endl;
}
};
int main(int argc, char** argv) {
BBB op1;
op1.output();
return 0;
}
[결과]

마무리
오버로딩 함수는 C언어에서도 사용이 가능합니다. 하지만 오버라이딩 함수는 클래스 상속에서 동일한 함수에 대한 표현으로 C++ 에서 사용합니다. 그리고 둘은 동일한 이름의 함수를 사용할 때 어떤 것이 오버로딩 함수이고 어떤 것이 오버라이딩 함수인지 개념을 잘 정의해 놓으세요.

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 600K SP virus707 account.