ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024.02.26 - 함수
    C++ 2024. 2. 26. 18:15
    • 함수
    자료형 함수명(매개변수1, 매개변수2, ...){
        처리과정
        return 결과값;
    }

    함수는 입력받은 매개변수 값을 처리하여 결과값을 출력해준다.

    함수를 사용하면 반복적인 프로그래밍을 피할 수 있고, 유지보수가 수월해지고 코드가 간략화 된다.

    불륨이 큰 프로그램일 수록 수정 또는 유지보수가 쉽지 않기 때문에 기능별로 세분화 하는 것이 필요하다.

     

    예시

    #include<iostream>
    
    int Sum(int a, int b) {
        int result = a + b;
        return result;
    }
    
    int main() {
        int num = Sum(3, 4);
        std::cout << num << std::endl;
    }

    매개변수 a, b를 받아 result를 반환하는 함수 Sum이다. 

     

    *함수의 이름과 매개변수만 선언해놓고 main함수 밑에서 기능을 쓸 수도 있다. 

    #include<iostream>
    
    int Sum(int a, int b);
    
    int main() {
        int num = Sum(3, 4);
        std::cout << num << std::endl;
    }
    
    int Sum(int a, int b) {
        return a + b;
    }

     

    함수의 이름은 대문자로 시작하는 것이 관례이다.

     

     

    - 함수의 형태

    함수는 기본적으로 매개변수의 유무와 반환값의 유무에 따라 네개의 형태로 나눌 수 있다.

     

    1. 매개변수와 반환값이 모두 있는 경우

    위의 코드가 그와 같은 경우이다. Sum()함수는 int형 매개변수 a, b를 가지고, int형 반환 값을 return한다.

     

    2. 매개변수는 있는데 반환값이 없는 경우

    #include<iostream>
    
    void Print(int num) {
        std::cout << num << std::endl;
    }
    
    int main() {
        Print(4);
    }

    반환값이 없기 때문에 함수의 자료형이 void이다. 

     

    3. 매개변수가 없고 반환값이 있는 경우

    #include<iostream>
    
    int ReadNum() {
        int num;
        std::cin >> num;
        return num;
    }
    int main() {
        std::cout << "ReadNum()으로 반환받은 값 = " << ReadNum();
    }

     

    4. 매개변수도, 반환값도 없는 경우

    #include<iostream>
    
    void PrintMe() {
        std::cout << "나는 반환값도 없고 매개변수도 없다. " << std::endl;
    }
    
    int main() {
        PrintMe();
    }

     

     

    - 함수 내부에서 다른 함수를 호출하기

    ex) 절대값을 비교하는 함수 만들기

    #include<iostream>
    
    //1. 절대값 구하는 함수
    int GetAbsValue(int num) {
        if (num < 0) return num * (-1);
        else return num;
    }
    //2. 절대값끼리 비교하는 함수
    int AbsCompare(int a, int b) {
        if (GetAbsValue(a) > GetAbsValue(b)) return a;
        else return b;
    }
    
    int main() {
        int inputNum1; int inputNum2;
        std::cout << "두개의 정수를 입력해라: ";
        std::cin >> inputNum1;
        std::cin >> inputNum2;
    
        int result = AbsCompare(inputNum1, inputNum2);
        std::cout << "절대값이 큰 수는 " << result << std::endl;
    }

    함수는 return을 만나면 결과값을 반환하고 함수를 종료한다.

     

     

    - 배열을 매개변수로 받는 함수

    배열을 매개변수로 받는 것도 가능하다.

    #include<iostream>
    
    //배열안의 두 숫자를 더하는 함수
    int SumNumber(int number[]) {
        return number[0] + number[1];
    }
    
    int main() {
        int arr[2] = { 3,7 };
        std::cout << SumNumber(arr);
    }

     

     

    - 2차원 배열을 매개변수로 받는 함수

    2차원 배열을 매개변수로 받을 때는 배열의 열 크기를 넣어주어야 한다.

    ex) 

    #include<iostream>
    
    const int RAW = 3;
    //배열의 각 요소의 합을 출력해주는 함수
    void SumArr2(int number[][RAW], int arrCol) {
        int sum = 0;
        for (int i = 0; i < arrCol; i++) {
            for (int k = 0; k < RAW; k++) {
                sum += number[i][k];
            }
        }
        std::cout << "배열 각 요소의 합 = " << sum << std::endl;
    }
    
    int main() {
        int arr[2][RAW] = { 1,2,3,4,5,6 };
        SumArr2(arr, 2);
    }

     

     

    - 배열을 결과값으로 반환하는 함수

    배열을 결과값으로 반환하기는 힘들고, 배열이 저장된 메모리의 주소값을 반환하는 것은 가능하다.

    주소값을 이용해 배열의 각 요소 값을 참조할 수 있다.

    이를 이해하기 위해서는 포인터를 다룰 줄 알아야 할 것이다. 

    ex) static 배열을 만들어서 주소값을 넘기기

    #include<iostream>
    
    //매개변수의 값에 2,3,4,5을 곱한 값을 요소로 저장하고 배열의 주소값을 반환하는 배열
    int* GetArr(int num) {
        int static arr[4];
        for (int i = 0; i < 4; i++) {
            arr[i] = num * (i + 2);
        }
        return arr;
    }
    
    int main() {
        int select;
        std::cout << "입력한 수: ";
        std::cin >> select;
        std::cout << "arr의 0번째 요소의 값 = " << *(GetArr(select)) << std::endl;
        std::cout << "arr의 1번째 요소의 값 = " << *(GetArr(select)+1) << std::endl;
        std::cout << "arr의 2번째 요소의 값 = " << *(GetArr(select)+2) << std::endl;
        std::cout << "arr의 3번째 요소의 값 = " << *(GetArr(select)+3) << std::endl;
    }

    주소값을 더해주어 배열을 참조할 수 있다.

     

     

    - 함수 오버로딩

    함수 오버로딩은 동일한 함수이름을 사용해 매개변수 자료형, 갯수가 다른 함수를 정의하는 것을 말한다.

    비슷한 작업을 하는 여러가지의 함수가 있을 때, 각 함수에 다른 이름을 부여하는 대신 함수 오버로딩 기능을 사용하면 좋다. 코드의 일관성을 유지시켜준다.

     

    예시)

    #include<iostream>
    
    void PrintValue(int num) {
        std::cout << "정수: " << num << std::endl;
    }
    void PrintValue(int a, int b) {
        std::cout << "정수: " << a << " " << b << std::endl;
    }
    void PrintValue(double num) {
        std::cout << "실수 값 : " << num << std::endl;
    }
    
    int main() {
        PrintValue(5);
        PrintValue(5,7);
        PrintValue(1.2);
    }

     

    'C++' 카테고리의 다른 글

    2024.02.27 - 구조체(struct)  (0) 2024.02.27
    2024.02.26 - 열거형 자료형(enum)  (0) 2024.02.27
    2024.02.23 - 실습  (0) 2024.02.24
    2024.02.23 - 배열  (0) 2024.02.24
    2024.02.22 - 난수 생성  (0) 2024.02.22
Designed by Tistory.