C++에는 이미 표준 라이브러리의 일부로 생성된 함수들이 많다.
예를 들어 <cmath>, <string> 헤더를 추가해 이용할 수 있다.
#include <iostream>
#include <cmath>
int main() {
// This seeds the random number generator:
srand (time(NULL));
// Use rand() below to initialize
int the_amazing_random_number = rand()%29;
std::cout << the_amazing_random_number << "\n";
}
<cmath> 추가를 통해 rand함수 이용했다.
0~28의 랜덤한 수를 출력하는 코드이다.
- 선언과 정의
- 선언: 함수의 이름, 반환 형식, 매개변수(함수의 인수이며 이를 입력 값으로 이용하는 경우 매개변수를 사용한다)
return문은 함수 실행에서 마지막 줄이다. 아래의 사진에서 값이 이미 반환이 되었기 때문에 출력되지 않는다.
- return의 작동 방식
1) 함수에서 반환된 값이 있어야 한다. (반환 값이 있는 함수에는 return이 있다)
2) 반환되는 값은 함수의 반환 타입과 일치해야 한다.
- 매개변수
- 매개변수는 함수의 정의에 사용된다. 함수 호출 중 사용할 입력 값에 대한 인자이다.
#include <iostream>
// Define get_emergency_number() below:
void get_emergency_number(std::string emergency_number)
{
std::cout << "Dial " << emergency_number;
}
int main() {
// Original emergency services number
std::string old_emergency_number = "999";
// For nicer ambulances, faster response times
// and better-looking drivers
std::string new_emergency_number = "0118 999 881 999 119 725 3";
// Call get_emergency_number() below with
// the number you want!
std::cout << "Dial " << new_emergency_number << "\n";
}
#include <iostream>
// Define get_emergency_number() below:
void get_emergency_number(std::string emergency_number)
{
std::cout << "Dial " << emergency_number;
}
int main() {
// Original emergency services number
std::string old_emergency_number = "999";
// For nicer ambulances, faster response times
// and better-looking drivers
std::string new_emergency_number = "0118 999 881 999 119 725 3";
// Call get_emergency_number() below with
// the number you want!
get_emergency_number(new_emergency_number);
}
- 함수 하나 당 하나의 인수로 제한되어 있지 않으며, 원하는 만큼 쓸 수 있다.
단, 함수를 호출할 때 순서를 주의해야 한다.
위의 함수 예시에는 price, tip, total_included 세 개의 매개변수가 있다. 이를 유의해 함수를 호출할 때 아래의 사진처럼 매개변수의 순서를 지켜 호출해야 한다.
예제) 함수 호출 연습
#include <iostream>
// Define name_x_times() below:
void name_x_times(std::string name, int x)
{
while(x >0)
{
std::cout << name<<std::endl;
x--;
}
}
int main() {
std::string my_name = "zzang!";
int some_number = 5; // Change this if you like!
// Call name_x_times() below with my_name and some_number
name_x_times(my_name, some_number);
}
- 매개변수 및 인수의 작동 방식
1) 함수 호출에서 매개변수와 인수의 수가 동일해야 한다.
2) 해당 인수는 동일한 순서로 전달돼야 한다.
>> 실행되는 동안 함수가 매개변수를 발견할 때마다 매개변수를 해당되는 (내가 정의한)인수로 대체한다.
예제) vector 이용, 3배수까지 출력하기
#include <iostream>
#include <vector>
// Define first_three_multiples() here:
std::vector <int> first_three_multiples(int num)
{
std::vector <int> first_three_multiples;
for(int i=1; i<4; i++)
{
first_three_multiples.push_back(num*i);
}
return first_three_multiples;
}
int main() {
for (int element : first_three_multiples(8))
{
std::cout << element << "\n";
}
}
#include <iostream>
// Define needs_water() here:
std::string needs_water(int days, bool is_succulent)
{
if (days > 3 && is_succulent == false)
{
return "Time to water the plant.";
}
if(days <= 12 && is_succulent == true)
{
return "Don't water the plant!";
}
if(days >= 13 && is_succulent == true)
{
return "Go ahead and give the plant a little water.";
}
else
{
return "Don't water the plant!";
}
}
int main() {
std::cout << needs_water(10, false) << "\n";
}
예제) 회문 구하기 (회문: 글자가 대칭으로 이루어진 것)
#include <iostream>
// Define is_palindrome() here:
bool is_palindrome(std::string text)
{
int len = text.size();
for(int i=0; i<len/2; i++) // 중간 문자가 기준
{
if(text[i] == text[len-i-1])
{
return true;
}
else
{
return false;
}
}
}
int main() {
std::cout << is_palindrome("madam") << "\n";
std::cout << is_palindrome("ada") << "\n";
std::cout << is_palindrome("lovelace") << "\n";
}