void 함수는 아무것도 반환하지 않습니다.
반면에 void 함수가 아닌 경우 어떤 값을 반환해야 합니다.
리턴값의 종류에 따라 그림 1) 값으로 리턴(return-by-value) 2) 참조로 리턴(return-by-reference)
🎨 값으로 반환: ReturnByValue
호출되는 함수측에서 임의의 식을 생성해, 그것을 돌려줍니다.
함수를 호출하면 값이 반환되므로 값이 필요한 위치에 함수를 활용한다.
🥎 ReturnByValue 예 1)
#include <iostream>
using namespace std;
//함수 선언
bool isEven(int y);
int main()
{
//함수 호출
cout << boolalpha << isEven(5) << endl;
cout << boolalpha << isEven(10);
return 0;
}
bool isEven(int y)
{
return ((y % 2) == 0);
}
RESULT:
isEven 함수는 y를 매개 변수로 가지며 y를 2로 나눈 나머지를 확인하여 짝수인지 여부를 반환하는 함수입니다.
간단한 리터럴 값을 반환하는 형식입니다.
🎨 참조로 반환: ReturnByReference
객체 지향 프로그래밍 메커니즘은 크기가 큰 객체를 반환해야 할 수 있습니다.
이 때 복사 비용을 줄이기 위해 리턴을 참조로 활용하는 것이 좋습니다.
🎨 포인터로 돌아가기: ReturnByPointer
🥎자료 교환 종합 실습 예 1)
쉽게 점수를 입력하여 성적을 계산하고 결과를 출력하는 프로그램을 만들어 보자.
우선, 스코어를 입력하는 함수 getScore /성적을 계산하는 findGrade/결과를 출력하는 printResult 함수를 작성합시다.
getScore, findGrade는 점수, 성적을 반환해야 하므로 값을 반환하는 함수이고 printResult는 값을 내뿜지 않고 출력하는 함수이므로 void 함수입니다.
또, findGrade 로 받는 반환값은 「A」, 「B」와 같은 문자형이므로, 반환값의 형태는 char 입니다.
#include <iostream>
using namespace std;
//함수 선언
int getScore();
char findGrade(int score);
void printResult(int score, char grade);
int main()
{
int score;
char c;
score = getScore(); //성적
c = findGrade(score); //등급 ('A','B' 등)
printResult(score, c);
return 0;
}
int getScore()
{
int score; // 지역 선언
do
{
cout << "점수를 입력하세요: ";
cin >> score;
} while (score < 0 || score>100);
return score;
}
char findGrade(int score)
{
char grade; // 지역 선언
if (score >= 90)
grade="A";
else if (score >= 80)
grade="B";
else if (score >= 70)
grade="C";
else
grade="F";
return grade;
}
void printResult(int score, char grade)
{
cout << endl << "시험 결과: " << endl;
cout << "점수: " << score << "/100" << endl;
cout << "등급: " << grade << endl;
}
RESULT: