2012년 12월 26일 수요일

const 함수

예제 코드

int GetX() const;
int GetY() const;
void ShowRectInfo() const;

"이 함수 내에서는 멤버변수에 저장된 값을 변경하지 않겠다!"

따라서 const 선언이 추가된 멤버함수 내에서 멤버변수의 값을 변경하는 코드가 삽입되면

컴파일 에러가 발생한다.

또 다른 특징

"const 함수 내에서는 const가 아닌 함수의 호출이 제한된다!"

2012년 12월 20일 목요일

참조자와 포인터 정리



*참조자는 선언과 동시에 변수를 참조해야 한다.
int num =20;
int &ref =20;(X)
int &ref;(X)
int &ref = NULL;(X)
int &ref = num;(O)



  1. #include
  2.  
  3. using namespace std;
  4.  
  5. int& ReferenceReturn(int &ref);
  6. int IntTypeReturn(int &ref);
  7.  
  8. int IntTypeReturn(int &ref)
  9. {
  10.     ref++;
  11.     return ref;//*****함수가 반환이 되면 정작 지역변수 ref는 소멸이 된다. 따라서 지역변수를 참조형의 변수에 저장하는 일은 없어야 한다.
  12. }
  13.  
  14. int& ReferenceReturn(int &ref)
  15. {
  16.     ref++;
  17.     return ref;
  18. }
  19.  
  20. int main(void)
  21. {
  22.     int num1=1;
  23.  
  24.     //반환형이 참조형인 ReferenceReturn함수는 반환값을 다음과 같이 두가지 형태로 저장할 수 있다.
  25.     int &num2 = ReferenceReturn(num1);//num2라는 별칭이 추가된다.
  26.     //int &num2 = ref// 와 동일
  27.  
  28.     int num3 = ReferenceReturn(num1);//&num1이 가리키는 값을 저장한다.   
  29.     //int num3 = ref;// 와 동일
  30.  
  31.     int num4 = IntTypeReturn(num1);//(O)
  32.     //int &num4 = IntTypeReturn(num1);(X)반환형이 기본자료형으로 선언된 IntTypeReturn 함수의 반환 값은 반드시 변수에 저장해야 한다.
  33.     //int &num4 = 2;와 동일
  34.  
  35.     const int &num5 = IntTypeReturn(num1);//(O)
  36.     //C++ 컴파일러는 const 참조자를 이용해서 상수를 참조할때 '임시변수' 를 만든다.
  37.  

  38.     return 0;
  39. }



const int num = 10;
변수 num을 상수화!

const int *ptr1 = &val1;
포인터 ptr1을 이용해서 val1의 값을 변경할 수 없음

int *const ptr2 = &val2;
포인터 ptr2가 상수화 됨

const int *const ptr3 = &val3;
포인터 ptr3가 상수화, ptr3을 이용해서 val3의 밧을 변경할 수 없음.


const 참조자는 상수도 참조가 가능하다!!!
const int &ref = 50;

//잘못된 구문
const int num = 20;
int &ref = num;//ref를 통한 값의 변경이 가능해지므로 상수화된 변수를 참조자에 할당 할수 없다.
ref +=10;


//포인터의 사용예
int num = 12;
int *ptr = #//별칭 ptr추가
int **dptr = &ptr;//dptr에 ptr에 담긴 값을 할당

int *(&pref) = ptr;//별칭 pref 추가
int **(&dpref) = dptr;//dpref에 dptr에 담긴 값을 할당



힙에 할당된 변수? 이제 포인터를 사용하지 않아도 접근할 수있다.
int *ptr = new int;
int &ref = *ptr;
ref = 20;
cout<<*ptr<//정상출력

*윤성우 열혈 C++프로그래밍 발췌

2012년 12월 19일 수요일

기본 자료형


자료형



자료형이름크기표현 범위
정수형short2Byte-32768 ~ 32767
unsigned short2Byte0 ~ 65535
int4Byte-2^31 ~ 2^31-1
unsigned int4Byte0 ~ 2^32-1
long4Byte-2^31 ~ 2^31-1
unsigned long4Byte0 ~ 2^32-1
실수float4Byte3.4*10^-38 ~ 3.4*10^38
배정도형 실수double8Byte1.7*10^-308~1.7*10^308
문자형char1Byte-128 ~ 127
unsigned char 1Byte0 ~ 255