세 개의 숫자를 오름차순으로 정렬하는 함수를 작성하여라.
함수 sortThreeNumbers(formal parameters)
에서는 숫자를 정렬만 하고, console
에 출력을 하지 않는다.
main 함수에서 세 숫자를 입력받아 함수를 호출하고, 그 결과를 console
에 출력하는 프로그램 작성.
(문제 출처 - C++로 시작하는 객체지향 프로그래밍 6.8)
#include <iostream>
using namespace std;
// function prototype
// 수정 가능
void sortThreeNumbers(formal parameters);
// main 함수는 수정할 수 없다.
int main()
{
double number1, number2, number3;
cout << " Enter three numbers: ";
cin >> number1 >> number2 >> number3;
sortThreeNumbers(number1, number2, number3);
cout << "After sorting three numbers:" << endl;
cout << number1 << " " << number2 << " " << number3 << endl;
return 0;
}
// function implementaion
// 이 함수에서는 숫자를 정렬만 하고 console에 출력을 하지 않는다.
// 수정 가능
void sortThreeNumbers(formal parameters)
{
...
}
수정 가능한 부분에서는 함수의 데이터타입을 수정하고 참조변수를 활용했다.
출력을 하지 않고 정렬만 할 때, void 함수를 사용하면 return 값이 없어 정확한 함수 실행을 할 수 없다.
(void -> double)
#include <iostream>
using namespace std;
double sortThreeNumbers(double& number1, double& number2, double& number3);
//함수 원형, 참조변수 사용 / 데이터타입&_변수명
int main()
{
double number1, number2, number3; // 메인문에 원래 변수가
//있어야 참조변수 사용 가능
cout << " Enter three numbers: ";
cin >> number1 >> number2 >> number3;
sortThreeNumbers(number1, number2, number3);
cout << "After sorting three numbers:" << endl;
cout << number1 << " " << number2 << " " << number3 << endl;
return 0;
}
double sortThreeNumbers(double& number1, double& number2, double& number3) // 함수에 참조변수 선언
{
double temp; // 전역변수로 선언하지 않을 때는
if (number1 > number2)
{
temp = number1; // double temp = number1;
number1 = number2;
number2 = temp;
}
if (number2 > number3)
{
temp = number2; // double temp = number2;
number2 = number3;
number3 = temp;
}
if (number1 > number2)
{
temp = number1; // double temp = number1; 로 쓴다.
number1 = number2;
number2 = temp;
}
return sortThreeNumbers(number1, number2, number3);
// 함수값을 return한다.
}
#include <iostream>
using namespace std;
double sortThreeNumbers(double number1, double number2, double number3);
int main()
{
double number1, number2, number3;
cin >> number1 >> number2 >> number3;
sortThreeNumbers(number1, number2, number3);
cout << "After sorting three numbers:" << endl;
cout << number1 << " " << number2 << " " << number3 << endl;
// 여기 오는데 number 값들 유지가 안 됨
}
double sortThreeNumbers(double number1, double number2, double number3)
{
double temp;
if (number1 > number2)
{
temp = number1;
number1 = number2;
number2 = temp;
}
if (number2 > number3)
{
temp = number2;
number2 = number3;
number3 = temp;
}
if (number1 > number2)
{
temp = number1;
number1 = number2;
number2 = temp;
}
return number1, number2, number3; // 여기서 문제가 발생!
}
참조변수를 배우기 전 작성한 코드이다.
sortThreeNumbers
함수를 return할 때 전달되는 값이 입력받은 number1, number2, number3
과 똑같아서 해결을 못 하고 있었는데, 참조변수를 사용한 후 문제를 해결했다.
main 함수의 형식 매개변수: double number1, double number2, double number3
sortThreeNumbers
함수의 매개변수: 각 함수 뒤에 &(앰퍼샌드)를 붙인 참조 변수
double& number1, double& number2, double& number3
를 사용
참조 변수 (call by reference)
-변수에 저장된 원 데이터에 접근 및 수정 가능
-원 변수에 대한 별칭(alias)으로 동작
// 이름이 긴 함수에도 별칭 사용 가능