반응형

Default Parameters

  • 함수 호출시 인자 전달을 생략하면 기본값이 적용된다.
  • 주의 사항
    • 함수의 마지막 파라미터부터 역순으로만 지정 가능
    • 헤더파일로 분리된 함수의 경우 선언에만 기본값을 정의 한다.(구현부
// 선언부, 구현부 분리 시 선언부에만 기본 파라미터 정의
void func1(int x, int y = 0, int z = 0);

// 구현부 가독성을 위해서 필요시 주석으로 표현
void func1(int x, int y /*= 0 */, int z /*= 0 */)
{
}

int main()
{
    func1(1, 1, 1); // 파라미터 기본값 사용 안함
    func1(1, 1); // 파라미터 기본값 z 사용
    func1(1); // 파라미터 기본값 y, z 사용
}

 

Function Overloading

  • 인자의 개수나 타입이 다르면 동일 이름의 함수를 2개 이상 만들 수 있음
  • 사용자 입장에서 일관된 함수를 제공 가능
  • 주의사항
    • 디폴트 값이 있는 함수에서는 주의 필요
    • 리턴 타임만 다른 경우는 오버로딩 불가
int square(int a)
{
    return a * a;
}

double square(double a)
{
    return a * a;
}

int main()
{
    square(1); // 정수 파라미터 함수 호출
    square(1.1); // 실수 파라미터 함수 호출
}

 

Inline Function

  • 함수 호출 시 실제 함수로 이동하지 않고 함수의 기계어 코드로 치환함
    • 장점 : 빠름
    • 단점 : 치환되는 함수가 클 경우 목적코드(실행파일)이 커질 수 있음
  • 인라인 상태 확인 방법
    • cl : 이름.cpp /FAs /Ob1 -> 이름.asm
    • g++ : 이름.cpp -S -02 -> 이름.s
  • 헤더파일에 구현부를 제공하여야 함
int add1(int a, int b)
{
    return a + b;
}

inline int add2(int a, int b)
{
    return a + b;
}

int main()
{
    int a = 1, b = 2;
    int n1 = add1(a, b); // 어샘블리어로 변환 시 함수 호출
    int n2 = add2(a, b); // 어샘블리어로 변환 시 함수자체로 치환
}

 

Template Function

  • 실제 함수가 아닌 함수를 만들어 내는 틀(template)
  • 사용자가 템플릿을 호출하는 코드를 보고 컴파일러가 필요한 타입의 함수를 생성
  • 템플릿 인자 표기는 "typename" 또는 "class"를 사용
  • 함수 뿐 아니라 구조체(or 클래스)도 템플릿으로 만들수 있음
  • 잘못 사용시 코드 메모리가 커질 수 있음(Code Bloat 현상)
// 함수를 만들어 내는 틀
template<typename T>
T square(T a)
{
    return a * a;
}

int main()
{
    square<int>(3); // int square(int) 함수 생성
    square<double>(3.3); // double square(double) 함수 생성
    
    square(3); // 생략시 타입 추론으로 int square(int) 함수 생성
    square(3.3); // 생략시 타입 추론으로 double square(double) 함수 생성
}
template<typename T>
struct Point
{
    T x;
    T y;
};


int main()
{
    Point<int> p1; // 멤버가 int인 Point 구조체 생성
    p1.x = 3;

    Point<double> p2; // 멤버가 double인 Point 구조체 생성
    p2.x = 3.3;
}
반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

C++ new  (0) 2019.05.06
C++ 함수 특징 #2  (0) 2019.05.05
C++ 제어문(if, switch)과 반복문(for)  (0) 2019.01.16
C++ 변수의 특징(variable) #2  (0) 2019.01.15
C++ 변수의 특징(variable) #1  (0) 2019.01.14

+ Recent posts