C++ 참조자(Reference) 사용법



C++ 참조자는 변수를 가리키는 변수다.

예를 들어 숫자 10을 담고 있는 변수 a 가 있다.

a를 가리키는 참조자 변수 b를 만들었다.

b에 값을 변경하면 a도 바뀌게 된다.



 참조자(Reference) 이해

 

사용법은 아래와 같다.

 int a = 10;

 int &b = a;


위에서 굵은 글씨로 &b라고 표시 된 부분이 참조자 변수 사용 방법이다.

&는 변수의 주소로도 사용되어 포인트를 가리킬때도 사용된다.

하지만 위의 참조자는 다른 내용이니 혼돈하지 말자.


[참조자의 잘못 사용 예]

 잘못된 사용

 설명

 int &b = 10;  

 참조자에 직접 데이터를 넣을 수 없다.

 int &b;

 참조자 선언과 동시에 가리킬 변수를 설정해 줘야 한다.

 int &b = NULL;

 참조자는 NULL 값이 허용되지 않는다. 


[전체 예제]


#include <iostream>

using namespace std;


int main(int argc, char** argv) 

{

    int a = 10;

    int &b = a;


    cout<<"a : "<< a <<endl;

    cout<<"b : "<< b <<endl;


    b = 20;

    cout<<"a : "<< a <<endl;

    cout<<"b : "<< b <<endl;

 

    return 0;

}


[결과]

a : 10

b : 10

a : 20

b : 20




 참조자(Reference)를 이용한 함수 호출

 

함수의 인자를 참조자로 선언 하면 어떻게 될까.


 void dataPlus( int &value );


해당 함수를 호출 할 때 인자 값으로 넣은 변수가 변경 된다.

이것을 Call-by-reference라 한다.

참고로 C에서는 다음과 같이 선언해야 호출 한 쪽의 변수가 변경 된다.

void dataPlus( int *value );

포인터는 복잡하니 참고로만 알아둔다.


[전체 예제]


#include <iostream>

using namespace std;


void dataPlus( int &value)

{

      value = value + 1;

}


int main(int argc, char** argv) 

{

    int a = 10;


    cout<<"a : "<< a <<endl;

    dataPlus( a );

    cout<<"a : "<< a <<endl;

 

    return 0;

}


[결과]

a : 10

a : 11





반응형

'프로그램 > 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

bool 자료형



자바, 파이썬등 요즘 나오는 프로그램 언어에는 bool 형이 존재한다.

하지만 C에서는 bool형이 없고 C++에서 등장한다.

bool형은 참,거짓 두 가지만 저장하는 값이다.



bool 자료형

 

사용법은 아래와 같다.

 bool isContinue;

 isContinue = true;  //true 값은 1이다.

 isContinue = false; //false 값은 0이다.


bool 형은 오르지 true나 false 두 가지 값만 가진다.

true는 참이며 false는 거짓이다.

if, while 조건문에서 true면 참이 되어 해당 조건문에 해당하는 실행문이 수행된다.


[전체 예제]


#include <iostream>

using namespace std;


int main(int argc, char** argv) 

{

    bool isContinue = true;

    int cnt = 0;


    while( isContinue )

    {

          cout<<cnt<<endl;

          cnt++;

          if( cnt == 5 )

          {

               isContinue = false;

               cout<<"while문 종료"<<endl;

          }          

    }

    cout<<"프로그램 종료"<<endl;

    return 0;

}


[결과]

0

1

2

3

4

while문 종료

프로그램 종료





반응형

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

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

이름공간(namespace)



이름과 매개변수가 같은 두 개 함수가 있다.

이름과 매개변수가 같기 때문에 컴파일 할 때 오류가 발생한다.

중복되는 이름이 적으면 함수명을 바꿔주는 방법이 있다.

하지만 일일히 바꿔주기 힘들 정도로 많다면 어떻게 할까?

바로 namespace를 사용하여 간단히 바꿀 수 있다.



namespace 이해하기

 

다음과 같이 두개의 함수가 있다.

 void printMessage()

 {

     std::cout<<"내가 정의한 메시지"<<std::endl;

 }


 void printMessage()

 {

     std::cout<<"친구가 정의한 메시지"<<std::endl;

 }


함수 명과 매개변수까지 동일 하여 컴파일 시 문제가 된다.

이 때 namespace를 사용해 해결해 보자.


[namespace 사용법]

 namespace Me

 {

 void printMessage()

 {

     std::cout<<"내가 정의한 메시지"<<std::endl;

 }

  }


 namespace Friend

 {

 void printMessage()

 {

     std::cout<<"친구가 정의한 메시지"<<std::endl;

 }

 }


이제 컴파일은 문제가 되지 않지만 두 함수를 호출은 어떻게 할까?


[각 함수 호출 방법]

 Me::printMessage();


namespace 명::함수 명


[전체 예제]


#include <iostream>


namespace Me

{

void printMessage()

{

     std::cout<<"내가 정의한 메시지"<<std::endl;

}

}


namespace Friend

{

void printMessage()

{

     std::cout<<"친구가 정의한 메시지"<<std::endl;

}

}


int main(int argc, char** argv) 

{

  Me::printMessage();

    return 0;

}


[결과]

내가 정의한 메시지




using을 이용하여 namespace를 명시

 

메시지를 출력하기 위해 std::cout 함수를 사용한다.

여기서 std는 namespace 이며 cout은 함수이다.

std::cout

std::endl 

매번 std::을 코딩하기 번거롭다.

이를 해결 하기 위해 using을 사용해 std::를 제거해 보자.


[사용법]

 using std::cout;

 using std::endl;



[전체 예제]


#include <iostream>


using std::cout;

using std::endl;


int main(int argc, char** argv) 

{

  cout<<"hello"<<endl;

    return 0;

}


[결과]

hello


위에 예제에서 cout, endl을 호출 할 때 std::가 없이 호출 되었음을 확인 할 수 있다.





반응형

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

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

인라인(inline) 함수



인라인 함수는 C에서 매크로 함수와 비슷한 기능을 한다.

인라인함수 호출시 해당 문장이 인라인 함수 몸체와 대체한다.

이 때 "함수가 인라인화 되었다."고 표현한다.

매크로 함수의 장점인 일반 함수에 비해 실행 속도가 빠르다.

인라인 함수 역시 이러한 장점을 가지고 있다.

하지만 컴파일러가 인라인화가 성능을 저하시킨다고 판단하면

인라인 키워드를 무시한다.



인라인 함수 이해하기

 

다음과 같은 인라인 함수가 있다.

 inline int SUM( int a, int b )

 {

     return a + b ;

 }


아래와 같이 인라인 함수를 호출 한다.


 std::cout<<SUM(1,2)<<std::endl;


컴파일이 인라인화 한다. 

인라인 함수 호출 부분이 인라인 함수 몸체로 바뀐다.


[인라인화]

std::cout<<1+2<<std::endl;



호출 문장 SUM(1,2) 이 1+2 된다.



 인라인 함수 예제

    

[전체 예제]


#include <iostream>


inline int sum( int a , int b  )

{

    return a + b ;

}


int main(int argc, char** argv) 

{

    int result = 0 ;

    result = sum( 6, 3 );

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


    return 0;

}


[결과]

 9




반응형

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

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

+ Recent posts