디폴트 값



함수를 호출 할 때 필요한 인자 값을 넣어주지 않으면 어떻게 될까?

컴파일 할 때 인자 값이 없다며 에러를 출력한다.

하지만 함수를 정의 할 때 디폴트 값을 설정 후 위와같이 컴파일 하면 에러가 발생되지 않는다.

이렇게 인자 값을 넣지 않고 함수를 호출 할 수 있는 디폴트 값에 대해 알아보자.



디폴트 값 설정 하기


사용방법은 다음과 같다.

 int sum( int a = 1, int b = 2 )

 {

     return a + b ;

 }


함수 정의 할 때 매개 변수 a, b에 각각 1,2를 초기 값으로 설정해 줬다.

이것이 디폴트 값이라 한다.


아래와 같이 각각 호출 때 결과 값을 예측 해보자.


int result = 0 ;


result = sum();

std::cout<<result<<std::endl;


result = sum( 8 );

std::cout<<result<<std::endl;


result = sum( 6, 3 );

std::cout<<result<<std::endl;


[결과]

 3

 10

 9

result = sum()

-> 두 개 인자 모두 입력되지 않아 모두 디폴트 값으로 설정이 된다.

    디폴트 값이 1,2 이며 두개 합은 3이다.


result = sum(8)

-> 첫번째 인자가 8로 입력되며 두번째 인자는 디폴트 값으로 설정이 된다.

    첫번째 인자 값인 8과 두번째 디폴트 값인 2가 더해져 10이 된다.


result = sum( 6, 3 )

-> 두 개 인자 모두 입력이 되었으며 두 합은 9이다.





 부분 적 디폴트 값 설정 하기

    

함수 매개변수를 부분적으로 선언 가능하다.

 int sum1( int a , int b = 2 int c = 3 )

 {

     return a + b + c ;

 }

 int sum2( int , int b, int c = 3 )

 {

     return a + b + c ;

 }


sum1, sum2 함수에 각각 일부만 디폴트 값을 선언했다.

sum1 함수 후출 할 때 첫 번째 인자를 필수로 넣어야 한다.

sum2 함수 후출 할 때 첫 번째, 두 번째 인자를 필수로 넣어야 한다.


여기서 주의 할 점은 아래와 같이 1,2번째는 디폴트 값을 설정 하고

3번째는 설정 안하면 안된다는 점이다.

int sum( int a = 1, int b = 2, int c ) <=== (X)

int sum( int a = 1, int b, int c ) <=== (X)

int sum( int a, int b = 2, int c ) <=== (X)


부분 디폴트 값 설정은 맨 오른쪽 매개 변수 부터 설정 한다.





[전체 예제]


#include <iostream>


int sum( int a = 1, int b = 2 )

{

    return a + b ;

}


int sum2( int a, int b = 2, int c = 3 )

{

    return a + b + c ;

}


int main(int argc, char** argv) 

{

    int result = 0 ;


    result = sum();

    std::cout<<result<<std::endl;

    

    result = sum(8);

    std::cout<<result<<std::endl;

    

    result = sum( 6, 3 );

    std::cout<<result<<std::endl;

    

    result = sum2( 5 );

    std::cout<<result<<std::endl;

    

    result = sum2( 5, 6 );

    std::cout<<result<<std::endl;

    

    result = sum2( 5, 6, 7 );

    std::cout<<result<<std::endl;

return 0;

}


[결과]

 3

 10

 9
 10
 14
 18




반응형

'프로그램 > C++' 카테고리의 다른 글

[C++] bool 자료형  (0) 2017.12.29
[C++] namespace 사용법  (0) 2017.12.27
[C++]인라인 함수 사용법  (0) 2017.12.26
[C++]함수 오버로딩 (Function Overloading)  (0) 2016.12.03
[C++] cout,cin 사용법  (0) 2016.11.15

C++ 함수 오버로딩



함수 오버로딩?


C에서는 같은 이름으로 함수 명을 작성 할 수 없었다.

하지만 C++에서는 같은 이름의 함수명을 작성 후 인자 값만 다르게 해서 표현 하는 것이 가능하다.


C에서 함수 표현 

C++에서 함수 표현 

int isum( int a, int b);

float fsum( float a, float b );

int sum( int a, int b);

float sum( float a, float b );


위와 같이 C에서는 인자가 다르면 함수 명도 다르게 작성해야 하지만 C++ 에서는 인자가 달라도 함수 명이 달라도 무방하다.

이렇게 함수명을 같게 해도 인자가 다르게 해서 호출해도 함수 구분이 가능 한것을 '함수 오버로딩'이라고한다.


다음은 함수 오버로딩을 이용한 예제를 보도록 하겠다.



#include <iostream>


int sum( int a, int b)

{

std::cout<<"int형 함수 호출"<<std::endl;

return a + b;


float sum( float a, float b)

{

std::cout<<"float형 함수 호출"<<std::endl;

return a + b;

}


int main(int argc, char** argv) {

int iSum = 0, a = 2, b = 5 ;

float fSum = 0, c = 5, d = 12 ;

iSum = sum( a, b );

fSum = sum( c, d );

}


sum이라는 함수 명은 같지만 인자나 리턴 값이 하나는 int형 다른 하나는 float형으로 지정 하였다.

실행을 해보면 인자 변수 타입 별로 다르게 함수가 호출 되는 것을 확인 할 수 있다.


int형 함수 호출

float형 함수 호출



※참고로 오버 로딩과 오버 라이딩과 개념이 해깔리는 경우가 있다.

함수 오버라이딩은 클래스에서 상속시 부모 함수를 재정의 함을 의미 한다.

또한 OOP를 지원하는 언어에서는 대부분 함수 오버 로딩과 오버 라이딩이 개념이 다 들어 있으니 공부해 두시면

JAVA나 python, C#, 파스칼등을 공부할 때 많이 도움이 됩니다. ( 제가 모든 언어를 다 사용해보질 않아서 확실 한것만 적어 놨습니다. ^^)


이상으로 C++에서 함수 오버로딩에 대해 설명 드렸습니다.

도움이 되셨나요?

반응형

'프로그램 > C++' 카테고리의 다른 글

[C++] bool 자료형  (0) 2017.12.29
[C++] namespace 사용법  (0) 2017.12.27
[C++]인라인 함수 사용법  (0) 2017.12.26
[C++]함수 매개변수 디폴트 값  (0) 2017.12.25
[C++] cout,cin 사용법  (0) 2016.11.15

C++ cout, cin 사용법



출력 함수 cout


콘솔 화면에 데이터를 출력 하는 방법에 대해 알아보자


std::cout << 출력 할 대상


#include <iostream>


int main(int argc, char** argv) 

{

std::cout<<"hello world"<<std::endl;

std::cout<<"hello world2"<<std::endl;

return 0;

}


#include <iostream> --> 콘솔 화면에서 입출력 기능을 하기 위해 iostream을 한다.

                            .h는 생략 가능

std::cout --> 출력 할 대상

std::endl --> 개행 처리 한다.


입력 함수 cin


콘솔 화면에 데이터를 출력 하는 방법에 대해 알아보자


std::cin >> 입력 받을 대상


#include <iostream>


int main(int argc, char** argv) 

{

char text[10] = {0,};

std::cout<<"what your name?"<<std::endl;

std::cin>>text;

std::cout<<"hello "<<text<< std::endl;

return 0;

}


char text[10] = {0,}; --> 문자열 10byte 할당 + 초기화

std::cin>>text;        --> text 변수에 사용자가 입력 한 것을 저장 한다.

std::cout<<"hello "<<text<< std::endl;  --> 변수 값 출력


C VS C++ 


C와 C++과 비교 해 보자


C

C++ 

#include <stdio.h>

#include <iostream> 

printf 

std::cout 

scanf

std::cin 

파일명.c

파일명.cpp 


반응형

'프로그램 > C++' 카테고리의 다른 글

[C++] bool 자료형  (0) 2017.12.29
[C++] namespace 사용법  (0) 2017.12.27
[C++]인라인 함수 사용법  (0) 2017.12.26
[C++]함수 매개변수 디폴트 값  (0) 2017.12.25
[C++]함수 오버로딩 (Function Overloading)  (0) 2016.12.03

+ Recent posts