티스토리 뷰
오버로딩 : 동일한 함수명으로 여러개의 함수를 제공
조건
1. 함수명은 같지만, 매개변수의 타입이나 갯수가 달라야한다
2. 리턴 타입은 상관없다
종류
1. 명시적 오버로딩 : 함수명은 같고, 매개변수나 파일의 갯수에 의해 구별
ex) void disp ( int a, int b );
void disp ( int a );
void disp ( );
=> 함수가 3개
2. 암시적 오버로딩 : 한개의 함수로 여러개를 표현
- default 인자 값을 가질 수 있다 -> 내가 어떤 값을 주겠다
ex) void disp ( int a = 0, int b = 0 );
=> 명시적 오버로딩의 예시를 하나로 만든것
disp ( 10, 20 );
disp ( 10 ); // disp ( 10, 0 );
disp ( ); // disp ( 0, 0 );
=> 3가지 다 위에 선언된 함수를 받아 사용된다
장점 : 코드가 간단해진다
주의 사항
1. 디폴트 인자값 + 1만큼 호출 가능하다
2. 명시적 오버로딩과 암시적 오버로딩을 같이 사용하면 안된다
ex) disp ( int a=0, int b=0, int c=0 );
disp ( ); // 충돌이 일어나서 ERROR
3. 내가 초기값을 준 위치부터 뒤에까지는 무조건 초기값을 줘야 한다
ex) disp ( int a, int b=0, int c=0 ); // 가능
disp ( int a=0, int b, int c=0 ); // 오류
명시적 오버로딩
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;
//명시적 오버로딩
void disp(int x, int y);
void disp(char x, char y);
void disp(float x, float y);
void main() {
int a = 1, b = 2;
char c = 'a', d = 'b';
float e = 3.2f, f = 4.7f;
disp(a, b);
disp(c, d);
disp(e, f);
}
void disp(int x, int y) {
cout << x << "\t" << y << endl;
}
void disp(char x, char y) {
cout << x << "\t" << y << endl;
}
void disp(float x, float y) {
cout << x << "\t" << y << endl;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;
//암시적 오버로딩
void disp(int a = 0, int b = 0, int c = 0); //선언부에 초기값을 줘야함
void main() {
int a = 10;
int b = 20;
int c = 30;
disp();
disp(a);
disp(a, b);
disp(a, b, c);
}
void disp(int a, int b, int c) { //여기에서 초기값을 주면 ERROR
cout << a << "\t" << b << "\t" << c << endl;
}
|
cs |
'LANGUAGE > C++' 카테고리의 다른 글
[C++] THIS (0) | 2018.03.08 |
---|---|
[C++] CLASS (0) | 2018.03.07 |
[C++] POINTER ARRAY - 포인터 배열 (1) | 2018.03.06 |
[C++] DYNAMIC MEMORY - 동적 메모리 (0) | 2018.03.06 |
[C++] POINTER - 포인터 (0) | 2018.03.05 |