목록전체 글 (156)
승쨩개발공부
this 이것의 주소 -> this가 사용된 객체의 주소를 저장하고 있다. this를 사용하면 사용한 객체가 할당된 메모리 시작 주소를 보여준다. -> 다음과 같이 CObj의 객체를 통해서 확인을 해보면 주소가 같은 것을 확인할 수가 있다. class CObj { public: void Func() { cout
복사 생성자 생성자 : 객체 생성 시 객체를 받아온다 -> 인자로 넘어오는 객체의 맴버 값을 복사 받는 것. 디폴트 복사 생성자 사용자가 복사 생성자를 정의하지 않으면 컴파일러가 복사 생성자를 생성하여 호출한다. 사용자가 복사 생성자를 정의하면 컴파일러는 복사 생성자를 생성하지 않는다. 복사 생성자의 호출 시점 3가지 1. 먼저 생성한 객체를 나중에 생성하는 객체의 인자로 전달하는 경우 2. 함수의 인자로 객체가 전달되는 경우 3. 함수의 반환 값으로 객체가 반환되는 경우 복사 생성자의 인자로 레퍼런스 타입을 받는 이유 생성자는 함수의 일종이므로 호출하면 stack 영역이 할당된다. 생성자의 stack 영역에 지역 변수를 할당하고 인자로 넘겨주는 값을 복사 받을 떄 또 다시 복사 생성자를 호출해야 하는 ..
static과 클래스 ->static 변수의 초기화는 전역에서 진행한다. static 변수는 Data 영역에 등록이 된다. -> 프로그램 시작 시 메모리에 등록된다. -> 사용자가 객체를 몇개 만들지 알 수 없는 상황이기 떄문에 -> 컴파일러가 static 변수를 여러개 만들 수 없다. -> 그래서, 단 하나만 메모리에 등록시킨 후 해당 클래스로 만든 모든 객체가 static 변수를 공유한다. static 변수의 초기화 static 변수는 이니셜라이즈를 통해 초기화가 불가능하다. 왜냐하면 static 변수는 프로그램 시작 시 Data영역에 메모리 할당이 되고, 생성자의 호출 시점은 런타임 중 객체를 만드는 시점에 메모리에 등록이 되기 떄문이다. static 변수의 초기화 방법 static 변수는 전역 변..
const와 클래스 const로 멤버 변수 선언 시 선언부에서 바로 초기화가 가능하다. const intm_a = 10; 단, 해당 클래스로 만든 모든 객체가 동일한 값을 가지게 된다. 그러므로 const로 멤버 변수 선언 시 초기화를 시키는 방법은 이니셜라이져를 사용하는 것이다. 이니셜라이져란? 메모리 할당과 동시에 호출되는 것. 메모리 할당과 동시에 호출되기 떄문에 선언과 동시에 멤버 변수 초기화를 할 수 있다. 이니셜라이져 선언 방법 생성자의 선언부와 정의부 사이에 :(콜론)으로 명시해준다. class CObj { public: CObj(int _a, int _b) // 이니셜라이져를 사용한다는 의미 : m_a(_a), m_b(_b) { m_a = _a; } private: const intm_a;..
전방 선언 외부 파일 어딘가에 해당 클래스가 존재한다고 알려주는 역활 다양한 파일들이 만들고 서로 엮는 과정에서 불필요한 파일의 정보까지 가져오는 상황이 발생한다. 이를 해결하기 위해서 전방 선언을 사용하는 것이 좋다. include와 전방 선언의 차이점 include 기존에 존재하는 정보를 확인할 수 있다. -> 옆에 있는 물건 전방 선언 어딘가에 존재한다는 것을 알 수 있지만 상세한 정보를 알 수 없다. -> 어딘가에 있을 물건 전방 선언의 장점 파일의 크기가 작아진다.(컴파일 속도의 향상) 전방 선언 시 주의 사항 1. 존재만 알려준다. 프로그램에서 전방 선언한 것이 존재하는지 검사를 하지 않는다. 오타가 발생할 경우 찾기 힘들다. 2. 존재만 알기 떄문에 객체를 만들 수 없다. 단, 포인터형으로는..