- 전역범위와 지역범위
- 전역범위: 전역범위에서 정의된 변수는 프로그램 어디서나 액세스 할 수 있다.
- 지역범위: 함수에서 정의된 변수는 함수 내에서만 액세스 할 수 있다.
#include <iostream>
void enter_code(int passcode) {
if (passcode == 0310) {
std::string secret_knowledge = "https://content.codecademy.com/courses/regex/onyourexcitingjourneylearningtocodeyouwillfindthis.gif";
std::cout << secret_knowledge << "\n";
} else {
std::cout << "Sorry, incorrect!\n";
}
}
int main() {
enter_code(0310);
}
passcode가 맞았을 때만 secret_knowledge가 출력될 수 있도록 지역범위로 secret_knowledge를 함수 안에 넣어준다.
- 인라인 함수
- 인라인 함수는 일반적으로 헤더 파일에 있는 함수를 정의할 때 이용한다.
[C++] 인라인 함수란? 장단점 (tistory.com)
[C++] 인라인 함수란? 장단점
※요약인라인 함수는 프로그램의 실행 속도를 높이기 위해 추가된 기능이며 C언어의 매크로 함수와 비교된다. (개발자 입장에서)일반 함수와 인라인 함수의 가장 큰 차이점은 함수의 호출 방식
placeforjake.tistory.com
예제) 인라인 함수 사용
#include <iostream>
#include <chrono>
#include "night.hpp"
int main() {
// Measure time taken for goodnight1():
std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();
std::cout << goodnight1("tulip");
std::chrono::high_resolution_clock::time_point end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> time_span = end - start;
// Print time taken for goodnight1():
std::cout << "Time taken for goodnight1(): " << time_span.count() << " milliseconds.\n\n";
std::cout << goodnight2("eraser", "ivy");
}
chrono는 밀리 초 단위로 시간을 클럭 할 수 있는 라이브러리이다.
인라인 함수를 사용하는 경우 프로그램의 실행 속도에 어떤 영향을 미치는지 테스트 해보았다. 평소 함수를 정의하고 호출하는 경우 해당 코드에서 함수의 위치로 이동했다가 수행 후 다시 돌아오는데, 인라인 함수를 이용하면 컴파일된 함수가 코드 안에서 이용된다. 그렇기 때문에 속도면에서 조금 더 유리하다.
이후 night.cpp에 있던 goodnight1함수를 night.hpp에서 인라인 함수로 정의해주었고 실행 시간은 다음과 같다.
인라인 함수 사용은 함수 코드를 수행하는 시간이랑 호출 과정을 처리하는데 걸리는 시간과 비교하여 호출되는 시간이 더 걸릴 때 사용하는 것이 유리하다.
- Argument (인수)
- 인수는 함수가 정의되고 선언될 때 파라미터에 할당되는 값이다. 함수 호출에서 인수를 사용하지 않으면 기본값으로 실행되지만 인수가 있는 경우 해당 인수가 기본 인수를 대체한다.
예제) 인수에 기본값 부여하기
- 블랙커피가 디폴트이며 우유와 설탕이 들어있지 않다. 매번 입력해주기 힘드므로 인수에 기본값으로 넣어주자.
- 오버로드
- 오버로드를 사용하면 인수로 전달되는 항목에 다라 함수가 동작하는 방식을 변경할 수 있다. 동일한 이름의 함수로 서로 다른 형식, 개수의 매개 변수를 이용할 수 있다.
예제) 함수 오버로드
- 템플릿
- 다른 매개변수로 반복해서 함수를 재정의하는 것을 막기 위해 템플릿을 이용한다.(적은 코드로 둘 이상의 함수를 만들 수 있다) 클래스와 함수 템플릿이 있다.
- 일반 함수와 달리 템플릿은 헤더 파일에서 생성한다.
- 템플릿을 사용하면 함수를 호출할 때 여러 형식 구현을 선택할 수 있다. 형식은 반환 형식, 매개변수 형식이 있다.
예시) 매개변수가 유연한 템플릿
int, char, std::string, double 다 가능하다.
- 템플릿을 사용하면 프로그램의 컴파일 시간은 느려지지만 실행 시간은 빨라진다.
예제1) get_smallest()함수는 다양한 형식을 반환한다. 함수 템플릿을 사용해라.
numbers.cpp는 사용하지 않는다.
템플릿 사용 전 numbers.hpp, numbers.cpp는 다음과 같다.