C++ 여정을 시작하기 위해 변수, 함수 호출, 주석부터 살펴봐요.
주석에는 한 줄 주석과 여러 줄 주석, 두 가지가 있어요.
같은 줄에서 // 뒤에 오는 모든 내용은 컴파일러가 무시해요.
여러 줄 주석은 C 스타일 주석이라고도 해요.
/*와 */로 감싸요.
그 사이에 오는 내용도 마찬가지로 무시돼요.
C++는 타입이 있는 언어예요.
모든 타입은 컴파일 시점에 알려져야 하고, 보통은 이를 직접 명시해야 해요.
변수의 타입은 바뀌지 않아요.
years라는 이름의 정수 변수는 이렇게 선언할 수 있어요:
int years;
변수는 선언할 때 초기화하는 게 좋아요. C++는 이를 위한 여러 가지 방식을 제공해요. 중괄호를 쓰는 방식이 현대적인 C++에 더 잘 맞지만, 등호를 쓰는 방식도 아주 흔해요.
int tomatoes{80};
int potatoes = 40;
C++는 초기화하지 않은 변수를 사용하는 것을 허용해요. 변수에 의도적으로 값을 넣기 전까지는 정의되지 않은 상태이고, 무엇이든 담겨 있을 수 있어요. 초기화 전 사용 오류와 정의되지 않은 동작을 피하려면 항상 초기화하는 게 좋아요. 정의되지 않은 동작은 이전까지 잘 실행되던 프로그램을 최악의 순간에 충돌시킬 수 있어요. 아무리 강조해도 부족해요: 정의되지 않은 동작은 무슨 수를 써서든 피해야 해요.
*, +, - 같은 산술 연산자는 3 * 2나 tomatoes + potatoes처럼 표현식의 일부가 될 수 있어요.
변수는 타입이 유지되는 한 다시 할당할 수 있어요:
tomatoes = tomatoes - 5; // tomatoes is now 75
potatoes = (32 * 2) + 11; // potatoes is now 75 as well
함수에는 이름, 반환 타입, 그리고 비어 있을 수도 있는 매개변수 목록이 있어요.
항상 47을 반환하는 always_fortyseven이라는 함수는 이렇게 생겼어요:
int always_fortyseven() {
return 47;
}
다음은 매개변수가 하나인 vip_fee예요:
int vip_fee(int standard_fee) {
/*
vip_fee calculates the vip fee based on the standard_fee.
*/
int vip_multi{3};
return standard_fee * vip_multi;
}
매개변수가 세 개이고 다른 함수를 호출하는 total_fee도 있어요.
int total_fee(int vips, int adults, int kids) {
/*
total_fee calculates the total price for a group of VIP and adult guests with kids.
Kids get a flat discount on the standard fee.
VIP guest fees are calculated by calling vip_fee.
*/
int standard_fee{30};
int kids_discount{15};
int kids_total_fee = kids * (standard_fee - kids_discount);
int vips_total_fee = vips * vip_fee(standard_fee);
int adult_total_fee = adults * standard_fee;
return vips_total_fee + adult_total_fee + kids_total_fee;
}
C++의 함수는 다른 몇몇 언어처럼 마지막 문의 값을 반환하지 않아요.
코드가 컴파일되려면 return 키워드가 필요해요.
공백은 소스 코드의 서식을 맞추는 데 쓰이며, 스페이스, 탭, 줄 바꿈을 포함해요. 컴파일러는 불필요한 공백을 무시하므로, 공백을 이용해 코드 구조를 잡을 수 있어요. 공백을 잘 활용하면 코드의 가독성을 높일 수 있어요. 다양한 서식 표준이 있지만, 모두 관례일 뿐 컴파일러가 강제하는 것은 아니에요.
// Formatting makes it easier to find bugs
int eggs_yolks = 3;
int yeast = 15;
int flour=500;int sugar=200;// compact, but difficult to read
루시안의 여자친구가 집으로 돌아오는 길인데, 루시안은 기념일 저녁 식사를 아직 준비하지 못했어요!
이 연습 문제에서는 루시안이 가장 좋아하는 요리책을 보고 근사한 라자냐를 만들 수 있도록 돕는 코드를 작성해요.
라자냐를 조리하는 데 걸리는 시간과 관련된 네 가지 과제가 있어요.
인자를 받지 않고, 라자냐를 오븐에 몇 분 동안 넣어 두어야 하는지 반환하는 ovenTime() 함수를 정의해요.
요리책에 따르면 예상 오븐 조리 시간은 40분이에요:
ovenTime();
// => 40
remainingOvenTime(int actualMinutesInOven) 함수를 정의해요. 이 함수는 라자냐가 오븐에 있던 실제 분을 인자로 받고, 이전 과제에서 구한 예상 오븐 조리 시간을 기준으로 라자냐가 오븐에 더 남아 있어야 하는 분을 반환해요.
remainingOvenTime(30);
// => 10
preparationTime(int numberOfLayers) 함수를 정의해요. 이 함수는 라자냐에 추가한 층의 개수를 인자로 받고, 각 층을 준비하는 데 2분이 걸린다고 가정할 때 라자냐를 준비하는 데 걸린 분을 반환해요.
preparationTime(2);
// => 4
elapsedTime(int numberOfLayers, int actualMinutesInOven) 함수를 정의해요. 이 함수는 두 개의 인자를 받아요. 첫 번째 인자는 라자냐에 추가한 층의 개수이고, 두 번째 인자는 라자냐가 오븐에 있던 분이에요. 이 함수는 라자냐를 조리하는 데 작업한 분, 즉 준비 시간과 현재까지 라자냐가 오븐에서 보낸 시간을 더한 값을 반환해야 해요.
elapsedTime(3, 20);
// => 26
Exercism에 가입하고 C++ 트랙을 개념 19개연습 문제 100개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.