언어/C++

[C++] 함수 자료리턴

SOo • 2023. 3. 20. 19:19

void 함수는 아무것도 리턴하지 않는다. 반면 void 함수가 아니라면, 어떤 값을 리턴해야한다. 리턴값의 종류에 따라서도 1) 값으로 리턴(return-by-value) 2) 참조로 리턴(return-by-reference) 3) 포인터로 리턴(return-by-pointer) 으로 구분할 수 있다. 

 

🎨 값으로 리턴 : 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:

점수 임의 입력