-
C++ 스타일 함수C++ 2021. 12. 21. 16:24
https://www.youtube.com/watch?v=8oAo31isO70&list=PLlJhQXcLQBJqywc5dweQ75GBRubzPxhAk&index=56
overload : 함수를 여러번 정의한다.
1. 매개변수 타입에 따른 오버로딩
#include <iostream> void swap(int& a, int& b) { int tmp = a; a = b; b = tmp; } void swap(double& a, double& b) { double tmp = a; a = b; b = tmp; } void swap(int* (&a), int* (&b)) { int* tmp = a; a = b; b = tmp; } int main() { int a = 20, b = 30; double da = 2.222, db = 3.333; int* pa = &a, * pb = &b; swap(a, b); std::cout << a << ' ' << b << std::endl; swap(da, db); std::cout << da << ' ' << db << std::endl; swap(pa, pb); std::cout << *pa << ' ' << *pb << std::endl; }
함수의 이름이 같아도 매개변수가 다르면 오버로딩되었다고 한다.
컴파일러에서 자동으로 매개변수 형식에 맞게 함수를 호출해준다.
2. 매개변수 수에 따른 오버로딩
#include <iostream> using namespace std; int inventory[4] = { 0 }; int score = 0; void getItem(int itemId) { inventory[itemId]++; } void getItem(int itemId, int cnt) { inventory[itemId] += cnt; } void getItem(int itemId, int cnt, int sc) { inventory[itemId] += cnt; score += sc; } int main() { getItem(1); getItem(2, 3); getItem(3, 10, 500); for (int n : inventory) { cout << n << ' '; } cout << endl; cout << "score : " << score << endl; }
void getItem(int itemId, int cnt = 1, int sc = 0) { inventory[itemId] += cnt; score += sc; }
위의 3개의 함수들을 하나로 묶어서 디폴트 매개변수를 주는 방식으로도 정의 할 수 있다.
이러면 여러 번 정의해야 할 것들을 1번만 정의해도 된다.
다만, 디폴트 매개변수는 오른쪽에 있어야한다.
잘못된 예시) void getItem(int a, int b=0, int c)
올바른 예시) void getItem(int a, int b, int c=0)
'C++' 카테고리의 다른 글
클래스 = 구조체??, 접근제어지시자 (0) 2021.12.21 네임스페이스 (0) 2021.12.21 7부(C++ 스타일 프로그래밍) 종합문제 (0) 2021.12.21 C++ 스타일 기본 문법 (0) 2021.12.21 C++입출력 (0) 2021.12.21