매개변수의 기본값(default parameter)
void MyFunction(int x = 1); // 대부분의 기본값은 선언에 주는 것이 대부분이다
void MyFunction(int x) // 매개변수 기본값을 선언과 정의에 중복하면 에러
{
std::cout << x << std::endl;
}
int main()
{
MyFunction(10); // 인자를 10으로 주었으므로 10으로 출력
MyFunction();// 인자를 주지 않았으므로 x=1 출력
}
void MyFunction(int x=1,int y=2, int z=3)
{
std::cout << x << y << z << std::endl;
}
int main()
{
MyFunction(4, 5, 6);
MyFunction(4, 5);
MyFunction(4);
MyFunction();
}
//출력값 : 456 453 423 123
함수의 오버로딩 사용했을 때
void MyFunction(int x=1,int y=2)
{
}
void MyFunction(int x = 1)
{
}
//컴파일은 가능함 하지만 함수를 사용할 때 판단에 따라서 에러가 발생하기도 함
int main()
{
MyFunction(1);
// function ambiguous error 발생 - 어떤 함수를 써야할지 컴파일러가 판단하기 어려움
MyFunction(1,2);
//이 경우 전혀 모호자이 않기 때문에 에러가 나지 않음
}
함수의 오버로딩을 사용하고 싶다면 타입을 같게 만들지 않는게 좋다
하지만 이런 모호성을 피하는게 좋음
void MyFunction(int x,int y)
{
}
void MyFunction(float x)
{
}
매개변수를 생략과 관련된 오류
void MyFunction(int x=10,int y)
{
// 오류
}
void MyFunction(int x , int y=10)
{
//기본 매개변수를 사용하려면 오른쪽부터 채우기
}
int main()
{
MyFunction(10);
MyFunction(10, 10);
// 이 경우 컴파일러는 의도적으로 프로그래머가 y를 생략한건지 실수로 쓰지 않은 것인지 파악하기 어려움
// 생략을하려면 앞이 아니라 뒤에서 생략만 가능함
}
가변인자(variadic) : 임의의 개수
말줄임표 사용 >>...
(자유도가 높으나 작성하기 어려워 자주 사용하지 않음)
void Dosomething(...)
{
//작성하기 까다로움
}
int main()
{
DoSomething(1);
DoSomething(1.0f);
DoSomething('a');
}
void DoSomething(int count,...) //앞에 필수변수 한개를 두고 생략하는 패턴을 보임
{
va_list params;
va_start(params, count);
for (int i = 0; i < count; i++)
{
std::cout << va_arg(params,int);
}
std::cout << std::endl;
//무엇이 올지 모르니 모두를 정해주어야함
}
int main()
{
}
template 기능이 이것과 비슷함 다음에 공부해보기
사용자에게 시작 문자와 끝 문자를 입력받아서 , 해당 문자들을 출력해보자
컴퓨터적 사고
=> 문제를 작게 분해해서 패턴을 찾고 추상화를 하고 알고리즘을 만듬
=> 패턴을 찾고 추상화 : 함수를 만드는 것과 유사
=> 알고리즘을 작성: 함수의 정의를 만드는 것과 유사
char ReadInput();
void PrintTable(char start, char end); // 시작에서 종료까지 문자가 매개변수로 들어와야함
int main()
{
//시작 문자를 입력 받는다
char start;
start = ReadInput();
//종료 문자를 입력 받는다
char end;
end = ReadInput();
//아스키 테이블에서 시작 종료까지 출력한다
PrintTable(start, end);
//입력받아서 되돌려주는 것은 기능이 같은 >> 함수로 만들 수 있음
}
char ReadInput()
{
char input;
std::cin >> input;
return input;
}
void PrintTable(char start, char end)
{
for (char i = start; i <= end; ++i)
{
std::cout << i << std::endl;
}
}