Program Language/C++ 언어

10. C++ 함수의 기본

parkes811 2024. 5. 31. 02:06

 

  • C++ 함수의 기본

- C++ 함수는 프로그램의 특정 작업을 수행하는 코드 블록입니다.

- 함수는 코드의 재사용성을 높이고 가독성을 향상시킵니다. 

 

  • 함수의 정의와 호출

- C++에서 함수는 다음과 같은 구조로 정의됩니다:

 
반환형 함수명(매개변수) { 
    // 함수 본문 
    return 값; // 반환형이 void인 경우 생략 가능 
}

// 예를 들어, 두 수를 더하는 함수를 정의해보겠습니다:
int add(int a, int b) { 
    return a + b; 
}

// 위의 add 함수는 두 개의 정수를 받아 그 합을 반환합니다. 함수는 다음과 같이 호출됩니다:
int result = add(3, 4); // result는 7

 

  • 매개변수 전달 방법

- 매개변수를 전달하는 방법에는 값에 의한 호출(Call by Value),

- 참조에 의한 호출(Call by Reference),

- 포인터에 의한 호출(Call by Pointer)이 있습니다.

 

  • 값에 의한 호출

- 값에 의한 호출은 매개변수의 값을 복사하여 함수에 전달합니다. 원래 값은 변경되지 않습니다:

void swap(int a, int b) { 
    int temp = a; 
    a = b; 
    b = temp; 
}
 
 
  • 참조에 의한 호출

- 참조에 의한 호출은 매개변수의 참조를 전달합니다. 함수 내에서 원래 값을 변경할 수 있습니다:

void swap(int& a, int& b) { 
    int temp = a; 
    a = b; 
    b = temp; 
}
 
  • 포인터에 의한 호출

- 포인터에 의한 호출은 매개변수의 주소를 전달합니다. 이를 통해 함수 내에서 원래 값을 변경할 수 있습니다:

void swap(int* a, int* b) { 
    int temp = *a; 
    *a = *b; *b = temp; 
}
 
 
  • 재귀 함수

- 재귀 함수는 함수가 자기 자신을 호출하는 함수입니다. 예를 들어, 팩토리얼을 계산하는 재귀 함수를 정의해 보겠습니다:

int factorial(int n) { 
    if (n <= 1) return 1; 
    return n * factorial(n - 1); 
}
 
 
  • 함수 포인터

- 함수 포인터는 함수의 주소를 저장하는 포인터입니다. 이를 사용하면 함수의 호출을 동적으로 변경할 수 있습니다:

int add(int a, int b) { 
    return a + b; 
} 
int (*funcPtr)(int, int) = add; 
int result = funcPtr(3, 4); // result는 7
 
 
 
  • 예제 코드
// 예제 1: 값에 의한 호출
#include <iostream> 
void increment(int a) { 
    a++; 
} 
int main() {
    int num = 5; 
    increment(num); 
    std::cout << num << std::endl; // 5 
    return 0; 
 }
 
// 예제 2: 참조에 의한 호출
#include <iostream> 
void increment(int& a) { 
    a++; 
} 
int main() { 
    int num = 5; 
    increment(num); 
    std::cout << num << std::endl; // 6 
    return 0; 
}

// 예제 3: 포인터에 의한 호출
#include <iostream> 
void increment(int* a) { 
    (*a)++; 
} 
int main() { 
    int num = 5; 
    increment(&num); 
    std::cout << num << std::endl; // 6 
    return 0; 
}

// 예제 4: 재귀 함수
#include <iostream> 
int factorial(int n) { 
    if (n <= 1) return 1;
    return n * factorial(n - 1);		
} 
int main() { 
    int num = 5; 
    std::cout << factorial(num) << std::endl; // 120 
    return 0; 
}

// 예제 5: 함수 포인터
#include <iostream> 
int add(int a, int b) { 
    return a + b; 
} 
int main() { 
    int (*funcPtr)(int, int) = add; 
    int result = funcPtr(3, 4); 
    std::cout << result << std::endl; // 7 
    return 0; 
}