(C++) 함수 데이터 리턴

  • by

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:


스코어 랜덤 입력