create account

[C++ 언어-막코딩] 9장 오버로딩과 오버라이딩 by codingman

View this thread on: hive.blogpeakd.comecency.com
· @codingman · (edited)
$1.53
[C++ 언어-막코딩] 9장 오버로딩과 오버라이딩
# [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;
}
```
**[결과]**
![a1.jpg](https://cdn.steemitimages.com/DQmW9R4zdsaC7a6VCghDq3DM5e9D9jpuXYFbQXFqq3JAwYJ/a1.jpg)


**[오버라이딩 함수]**
```
#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;
}
```
**[결과]**
![a2.jpg](https://cdn.steemitimages.com/DQmWUYJuFuu7JAsWkZCjzqmKwEs8BU8dmknQR29saJZBJqB/a2.jpg)

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

---

#####  <sub> **Sponsored ( Powered by [dclick](https://www.dclick.io) )** </sub>
[![dclick-imagead](https://steemitimages.com/0x0/https://cdn.steemitimages.com/DQmSwkE4cySARFCKdemZWVwyk8dxh7HeDNiqwuVmWR3RBXE/Group%205.png)](https://api.dclick.io/v1/c?x=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjIjoiY29kaW5nbWFuIiwicyI6ImMtOS0tMTU1OTUyMDkwMjMwOSIsImEiOlsiaS0yIl0sInVybCI6Imh0dHBzOi8vd3d3LmRjbGljay5pbyIsImlhdCI6MTU1OTUyMDkwMiwiZXhwIjoxODc0ODgwOTAyfQ.9f3AeuE0J2WMmpzZfbtL6YZFo1_Hq7470T08NLgVMuk)
👍  , , , , , , , , , , , , , , ,
properties (23)
authorcodingman
permlinkc-9--1559520902309
categorykr-dev
json_metadata{"tags":["kr-dev","jjm","busy","kr","kr-join"],"app":"busy/2.5.6","format":"markdown","community":"busy","users":[],"links":["https://sourceforge.net/projects/orwelldevcpp/","https://www.tutorialspoint.com/compile_c_online.php","https://www.dclick.io","https://api.dclick.io/v1/c?x=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjIjoiY29kaW5nbWFuIiwicyI6ImMtOS0tMTU1OTUyMDkwMjMwOSIsImEiOlsiaS0yIl0sInVybCI6Imh0dHBzOi8vd3d3LmRjbGljay5pbyIsImlhdCI6MTU1OTUyMDkwMiwiZXhwIjoxODc0ODgwOTAyfQ.9f3AeuE0J2WMmpzZfbtL6YZFo1_Hq7470T08NLgVMuk"],"image":["https://cdn.steemitimages.com/DQmW9R4zdsaC7a6VCghDq3DM5e9D9jpuXYFbQXFqq3JAwYJ/a1.jpg","https://cdn.steemitimages.com/DQmWUYJuFuu7JAsWkZCjzqmKwEs8BU8dmknQR29saJZBJqB/a2.jpg","https://steemitimages.com/0x0/https://cdn.steemitimages.com/DQmSwkE4cySARFCKdemZWVwyk8dxh7HeDNiqwuVmWR3RBXE/Group%205.png"]}
created2019-06-03 00:15:03
last_update2019-06-03 00:17:06
depth0
children1
last_payout2019-06-10 00:15:03
cashout_time1969-12-31 23:59:59
total_payout_value1.158 HBD
curator_payout_value0.376 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length2,880
author_reputation23,188,231,710,844
root_title"[C++ 언어-막코딩] 9장 오버로딩과 오버라이딩"
beneficiaries
0.
accountdclick
weight1,000
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id85,939,501
net_rshares3,100,677,339,663
author_curate_reward""
vote details (16)
@virus707 ·
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.
properties (22)
authorvirus707
permlinkre-c-9--1559520902309-1559546490
categorykr-dev
json_metadata{"tags":["jjm"]}
created2019-06-03 07:21:30
last_update2019-06-03 07:21:30
depth1
children0
last_payout2019-06-10 07:21:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length203
author_reputation557,563,606,581,756
root_title"[C++ 언어-막코딩] 9장 오버로딩과 오버라이딩"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id85,957,934
net_rshares0