C++ 언어의 함수는 크게 반환값이 있는 함수와 반환값이 없는 함수 두 가지로 나눌 수 있다. 반환값이 있는 함수는 함수가 호출(call)이 되어 뭔가 작업을 거친 후 호출한 위치로 그 기능을 수행한 결과 값을 다시 보낸다. 반환값이 없는 함수는 단순히 어떤 기능만 수행한다는 것을 의미한다.
예를 들어서 두 개의 입력 값을 받아서 더한 값을 돌려 주는 기능을 하는 함수를 생각해 보자. 이 때 입력되는 값은 ‘인자’(argument) 혹은 ‘매개변수’(parameter)라고 부른다. (이후에는 ‘인자’ 라는 명칭만을 사용할 것이다.) 계산 결과값(이 경우 더한 값)을 호출한 곳으로 되돌려주는 경우 이것을 ‘반환값’, ‘리턴값’이라고 한다.
사용자 정의 함수는 문자 그대로 ‘사용자가 필요에 의해서 만드는 함수’를 의미한다. C++ 프로그램에서 함수를 사용하기 전에 반드시 정의를 해 주어야 한다. 함수의 정의 형식은 다음과 같다.
반환자료형 함수명(데이터형 인수1, 데이터형 인수2 ...) { 함수 본체} |
예를 들면 다음과 같다.
void sayHi() { printf("Hi "); printf("all.");} |
이 함수의 이름은 sayHi()이다. 함수명 앞에는 이 함수의 반환 값의 데이터 형을 명시한다. 반환값이 없는 경우에는 명시적으로 void라는 키워드를 써야 한다. 이 함수는 인자가 없다. 이렇게 인자가 없는 경우 함수명 뒤에 그냥 빈 괄호를 입력한다. 괄호를 생략할 수 없음에 유의하자.
이렇게 정의된 함수는 다음과 같이 호출할 수 있다.
int main() { ... sayHi(); // sayHi()함수 호출 ...} |
이것을 합하여 완전한 프로그램으로 만들면 다음과 같다.
#include <stdio.h>
void sayHi() { printf("Hi "); printf("all.");}
int main(int argc, char **argv){ sayHi();} |
이 프로그램을 보면 sayHi() 함수와 main() 두 개의 함수가 있다. 이 예제가 실행될 때는 항상 main()함수를 실행시키며 main()함수가 종료되면 프로그램도 종료된다. C++ 언어는 항상 main()함수를 제일 먼저 실행시킨다.
또 다른 함수의 예를 들어보자.
void sayHello(int in){ for(;in>0;in--) { printf(“Hello.\n”); }} |
이 함수는 반환값이 없으며 인자를 하나 받는 함수이다. 그렇게 받은 인자의 개수만큼 “Hello.”를 반복해서 출력하는 일을 한다. 이것으로 완전한 프로그램을 만들어 보면 다음과 같다.
#include <stdio.h>
void sayHello(int in){ for(;in>0; in--){ printf("Hello. "); }}
int main(int argc, char **argv){ sayHello(3); int ia = 5; sayHello(ia);} |
Hello. Hello. Hello.Hello. Hello. Hello. Hello. Hello. |
main()함수 내에서 sayHello()함수를 두 번 호출했다. sayHello(3)이라고 호출하면 3이라는 정수형 값이 sayHello(int in) 의 인자 in에 저장된 후 함수가 수행된다. 따라서 “Hello.”라는 문자열이 3번 출력된 것이다. 마찬가지로 두 번째 호출인 sayHello(ia) 는 ia의 값은 5를 이 함수의 인자 in에 전달한다. 그러므로 “Hello.”가 다섯 번 출력 된다.
다른 예로 이번에는 반환값이 있는 함수를 들어보자.
float add(float fa, float fb) { float fc = fa + fb; return fc;} |
이 함수는 반환값의 자료형이 float형이라고 함수명 앞에 명시되어 있다. 인자(argument)는 두 개이고(fa, fb) 모두 float 형이다. 함수 본체에 보면 변수 fc에 두 인자의 합을 저장한 후 return 명령어를 이용하여 그 값을 반환하고 있다. 따라서 이 함수는 두 실수를 받아서 그 합을 반환하는 함수이다.
이와 같이 반환값이 있는 함수의 경우 호출부에서는 그 반환값을 변수에 저장할 수 있다. 예를 들어 다음과 같다.
float fr;fr = add(1.0f, 2.5f);//fr에 3.5 저장
float fa = 10.1f, fb = 22.3f;float fc = add(fa, fb);// fc에 32.3이 저장됨 |
이와 같이 반환값이 있는 함수의 경우는 호출부에서 그 반환값을 받아서 변수에 저장할 수 있다.
#include <stdio.h>
float add(float fa, float fb) { float fc = fa + fb; return fc;}
int main(int argc, char **argv) { float fr; fr = add(1.0f, 2.5f); float fa = 12.3f, fb = 45.6f; float fc = add(fa, fb); printf("fr = %f, fc = %f", fr, fc);} |
fa = 3.500000, fb = 57.899998 |
좀 더 다양한 함수의 정의 예를 다음 표에 들었다.
함수 정의 예 | 의미 |
void nop() {... } | 반환값이 없음을 명시적으로 나타냄 |
int sub(int ia, int ib) {...} | 두 개의 int형 입력, 반환값도 int형 |
double round(double dx) {...} | 하나의 double형입력, 출력도 double형 |
void myDate(void) {... } | 인자가 없음을 명시적으로 나타냄. |
char display(char ca) {...} | 하나의 char형입력, 출력도 char형 |
여기에서는 함수의 기본적인 정의 방법에 대해서 살펴 보았다.
C++ 강좌 전체 목록 >>>
c{c++},n{c0025}