#include <iostream>
using namespace std;
// 함수 오버로딩 (중복 정의: 같은 함수 이름, 다른 매개변수)
// 1. 두 개의 정수를 더하는 함수
int Add(int a, int b) {
return a + b;
}
// 2. 한 개의 정수를 받아 1을 더하는 함수
int Add(int a) {
return a + 1;
}
// 3. 두 개의 실수를 더하는 함수
float Add(float a, float b) {
return a + b;
}
int main() {
// 정수 덧셈
int result1 = Add(1, 2);
cout << "Add(1, 2) = " << result1 << endl; // 3 출력
// 단일 정수 덧셈 (기본 값 1 추가)
int result2 = Add(5);
cout << "Add(5) = " << result2 << endl; // 6 출력
// 실수 덧셈
float result3 = Add(1.5f, 2.1f);
cout << "Add(1.5f, 2.1f) = " << result3 << endl; // 3.6 출력
return 0;
}
Add(1, 2) = 3
Add(5) = 6
Add(1.5f, 2.1f) = 3.6
| 오버로딩 가능 여부 | 설명 |
|---|---|
| ✅ 가능 | 매개변수 개수가 다름 (int Add(int) vs. int Add(int, int)) |
| ✅ 가능 | 매개변수 타입이 다름 (int Add(int, int) vs. float Add(float, float)) |
| ❌ 불가능 | 반환형만 다름 (int Add(int, int) vs. float Add(int, int)) |
// 플레이어 정보 설정 함수
void SetPlayerInfo(int hp, int mp, int attack, int guildId = 0, int castleId = 2) {
cout << "hp: " << hp << endl;
cout << "mp: " << mp << endl;
cout << "attack: " << attack << endl;
cout << "guildId: " << guildId << endl;
cout << "castleId: " << castleId << endl;
}
int main() {
// 기본 인자값이 있는 함수 호출
SetPlayerInfo(100, 40, 10); // guildId = 0, castleId = 2 자동 설정
cout << endl;
SetPlayerInfo(120, 50, 20, 1); // castleId = 2 자동 설정
cout << endl;
SetPlayerInfo(150, 60, 30, 3, 5); // 모든 인자 지정
return 0;
}
hp: 100
mp: 40
attack: 10
guildId: 0
castleId: 2
hp: 120
mp: 50
attack: 20
guildId: 1
castleId: 2
hp: 150
mp: 60
attack: 30
guildId: 3
castleId: 5
기본값은 마지막 매개변수부터 적용해야 한다.
void SetPlayerInfo(int hp, int mp, int attack, int guildId = 0, int castleId = 2);
void SetPlayerInfo(int hp, int guildId = 0, int mp); (중간에 기본값 설정 불가!)특정 매개변수만 기본값을 사용하고 싶을 때, 앞의 매개변수들도 반드시 입력해야 한다.
// 팩토리얼 계산 함수 (재귀)
int Factorial(int n) {
if (n <= 1) // 종료 조건 (Base Case)
return 1;
return n * Factorial(n - 1); // 재귀 호출 (Recursive Case)
}
int main() {
int result = Factorial(5); // 5! = 5 * 4 * 3 * 2 * 1 = 120
cout << "5! = " << result << endl;
return 0;
}
5! = 120
int Factorial(int n) {
return n * Factorial(n - 1); // 종료 조건 없음! (무한 재귀)
}
int main() {
int result = Factorial(100000); // 매우 큰 값으로 테스트
cout << result << endl;
return 0;
}
🚨 결과: 스택 오버플로우 발생!
"Stack Overflow" 오류가 발생하며 프로그램이 강제 종료됨.
for 문 활용)