# [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++ 에서 사용합니다. 그리고 둘은 동일한 이름의 함수를 사용할 때 어떤 것이 오버로딩 함수이고 어떤 것이 오버라이딩 함수인지 개념을 잘 정의해 놓으세요.
---
##### <sub> **Sponsored ( Powered by [dclick](https://www.dclick.io) )** </sub>
[](https://api.dclick.io/v1/c?x=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjIjoiY29kaW5nbWFuIiwicyI6ImMtOS0tMTU1OTUyMDkwMjMwOSIsImEiOlsiaS0yIl0sInVybCI6Imh0dHBzOi8vd3d3LmRjbGljay5pbyIsImlhdCI6MTU1OTUyMDkwMiwiZXhwIjoxODc0ODgwOTAyfQ.9f3AeuE0J2WMmpzZfbtL6YZFo1_Hq7470T08NLgVMuk)