ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.