CPP 프로그램의 함수
함수 → 모듈화 → 재사용성
#include <iostream>
int main()
{
read_input();
process_input();
write_output();
return 0;
}
위의 코드가 하드 코딩을 하지 않고 ‘모듈화’를 시켜 만든 코드 → 필요 할 때 마다 사용 가능하다.
함수를 사용할 때 알아야 하는 것
함수를 사용할 때 몰라도 되는 것
참고)
여기서 말하는 표준 라이브러리란?
표준 라이브러리(standard library)는 특정 프로그래밍 언어와 함께 제공되는 함수, 클래스, 모듈 등의 집합을 말합니다. 이 라이브러리는 프로그래밍 언어의 기본 설치 패키지에 포함되어 있어서 추가적으로 다운로드하거나 설치할 필요 없이 바로 사용할 수 있습니다
fucntion_name(arguments);
std::cout << sqrt(400.0); << std::endl;// sqrt()함수를 사용 가능함
result = pow(2.0,3.0); // 2^3
#include <iostream>
void readIput(int a) { //***
std::cin >> a;
}
int main()
{
int a;
readInput(a);
return 0;
}
함수는 아래와 같은 형식으로 작성해 주면 된다.
여기서 *** 표시 부분을 설명하자면
“컴파일러”는 함수의 호출 이전에 함수의 정의를 알아야 한다.
즉, 함수의 호출 이전에 함수의 정의를 선언해 주어야 한다.
#include <iostream>
void readInput(int);//중요!
int main()
{
int a;
readInput(a);
return 0;
}
void readIput(int a)
{
std::cin >> a;
}
위의 두 소스코드가 한 프로젝트 안에 있다고 가정 해보자.
우리가 처음 얘기했던 과정을 기억하는가?
함수의 선언에서 정의한 모든 매개변수가 전달돼야 함
기본 인수를 사용하면 인수가 주어지지 않을 시 기본값, 즉 Default 값을 사용하도록 정의 가능
기본값은 함수 프로토타입 또는 정의부에 선언
여러 개의 기본값을 사용 할 경우 오른쪽부터 선언해야 함
#include <iostream>
double calcCost(double baseCost, double taxRate = 0.06, double shipping = 3.5);//프로토 타입
//double calcCost(double baseCost, double taxRate = 0.06, double shipping);//ERR,오른쪽부터 정의 해야함
int main()
{
double cost = 0;
cost = calcCost(100.0, 0.08, 4.5);
cost = calcCost(100.0, 0.08);
cost = calcCost(200.0);
return 0;
}
double calcCost(double baseCost, double taxRate = 0.06, double shipping = 3.5)
{
return baseCost += (baseCost * taxRate) + shipping;
}
위와 같이 둘 다 디폴트 값을 정의하고 컴파일한다면 오류가 발생한다.
why?
#include <iostream>
double calcCost(double baseCost, double taxRate = 0.06, double shipping = 3.5);//프로토 타입
int main()
{
double cost = 0;
cost = calcCost(100.0, 0.08, 4.5);
cost = calcCost(100.0, 0.08);
cost = calcCost(200.0);
return 0;
}
double calcCost(double baseCost, double taxRate, double shipping)
{
return baseCost += (baseCost * taxRate) + shipping;
}
위와 같이 프로토타입 || 정의부 둘 중 하나에만 디폴트 값을 넣는다.
서로 다른 매개변수 리스트를 갖는 동일한 이름의 함수 정의
#include <iostream>
using namespace std;
int addNumber(int, int);
double addNumber(double, double);
int main()
{
cout << addNumber(10, 20) << endl;
cout << addNumber(10.0, 20.0) << endl;
return 0;
}
int addNumber(int a, int b) {
return a + b;
}
double addNumber(double a, double b)
{
return a + b;
}
같은 이름이지만 다른 함수로 컴파일러가 인식을 하여 오류가 발생하지 않음
int addNumber(int, int);
double addNumber(double, double);
‘반환 타입’만 다를 경우에는?