헤더파일을 작성시에 #ifndef ~ #endif 를 이용하여 중복으로 삽입되는 것을 막자. Aaa.h #ifndef AAA_H_INCLUDE #define AAA_H_INCLUDE .. ..source .. #endif #ifndef 는 해당 매크로정의(#define)가 존재하는지 검사한다. 존재한다면 이미 삽입된것으로 간주하고 넘어가기 때문에 중복으로 삽입되는 것을 방지할 수 있다. 하지만 매크로정의는 유일키를 사용해야함을 주의하자. const 으로 선언된 클래스의 객체는 const 맴버함수만 접근할 수 있다. .... class ClassA{ ... public : int getValue() const{......} void methodB(){.....} ..... }; 메소드의 const 의미는 ..
참조변수는 & 를 이용하여 선언한다. int b = 10; int& a = b; b를 참조하게 된다. 여기까지는 포인터변수와 비슷할지 모르겠다. 하지만 앞으로 살펴보면 알겠지만 포인터변수와는 다르다. 참조변수는 어떤 변수의 참조를 갖도록 초기화 하는것은 변수를 선언할 때만 가능하다. int a=10, b = 20; int& aRef = a; 이렇게 하면 aRef 는 a를 참조하게 된다. aRef = 100; 변수 a 에는 100이 대입된다. aRef = b; //☆☆☆☆이 부분이 중요하다. aRef 는 b참조를 얻는것이 아니라 b 값을 대입받게 된다. 그러므로 변수 a 에는 b의 값이 대입된다. C 언어에서 함수를 호출시에 Call by reference를 이용하려면 포인터 변수를 사용했지만 c++ 에서..
동적 메모리 할당이란 : 필요할 때 기억공간을 할당하고 더 이상 그 공간이 필요하지 않으면 반환하는것 동적메모리 할당으로 생성된 기억공간은 이름(변수명)이 없지만 포인터 변수로 참조할 수 있다. int* p; p = new int; //동적 메모리 할당 delete p; // 할당된 메모리 반환 여기에서 delete p를 하면 공간이 반환은 되지만 여전히 포인터는 가르키고 있다. 이때 p = NULL; 을 해서 포인터가 가르키는곳이 없음을 하는것이 좋다고 한다. 변수를 동적으로 할당받은 포인터변수는 delete[] 로 반환한다. int* p = int[4]; delete[] p; p = NULL
p와 *p를 구분하자. int *p = new int[10]; 이렇게 되어 있는 포인터 변수 p를 참조할때는 아래와 같다. ++p 뒷 주소를 참조하게 된다. ++(*p) 현재 주소에 저장된 값을 증가 *++p 뒷 주소에 저장된 값을 참조 (*p)++ 현재 주소에 저장된 값을 증가 *을 썼을때와 안썼을때의 차이점을 생각해보면 쉽다. *의 의미는 참조한다는 뜻이다. 그러므로 *가 붙으면 참조하는 값을 말하고. *가 붙지 않으면 주소값을 저장하는 포인터 변수 그 자체를 말한다. 포인터 변수 : 주소값을 저장하는 변수라고 이해하면 편하다. 포인터 변수의 선언은 int *a; 요렇게 하면된다. 주소값의 저장은 아래와 같이 한다. int b = 0; a = &b; cout 를 사용하여 더 간편하게 참조하는 방법이 ..