C++'class의 구성요소
1. 멤버 변수(member variable)
2. 생성자(constructor)<- default로 존재
3. 멤버 함수(member function)
4. 복사 생성자<- default로 존재
5. 소멸자<- default로 존재
6. 대입연산자 함수 <- default로 존재
1. 멤버변수(member variable)
1) 주로 private 접근 지정자 사용
2. 생성자(constructor)
1) 주로 pupblic 접근 지정자 사용
2) 기능 : 객체등록, 필드 초기화
3) 오버로딩 가능
4) 객체 생성시 자동 호출
5) 'const member function'으로 만들 수 없다.
3. 멤버함수(member function)
1) 주로 public 접근 지정자 사용
2) 외부함수에서 필드를 사용 하기위한 기능
4. 복사 생성자
1) 호출시기 : A aa;
객체 생성시 객체를 인자로 줄 경우 A bb(aa);
객체 생성시 객체를 대입할 경우 A cc = aa;
메소드의 매개변수로 객체를 선언할 경우 A :: disp(A aa);
메소드에서 객체를 리턴할 경우 return aa;
2) 종류
1얕은 복사 : default 복사 생성자
2깊은 복사 : 필드를 포인터로 사용 할 경우, 하나의 객체를 두 개의 포인터가 같은 객체를 사용하기 때문에
(주소가 복사되기 때문에) 메모리 문제, 즉 런 타임 에러가 발생하기 때문에 개발자가 직접 객체를 생성해서 값(주소)을 복사해줘야 한다. 이것이 deep copy 기법이다.
5. 소멸자
1) 정적 메모리 할당으로 stack영역에 생성된 객체가 함수가 끝나고 소멸될때 호출된다.
2) 기능 : 객체 등록해제
3) 생성자와 동일하지만 함수명 앞에 ~(틸드)가 붙는다. ex) ~Car(){};
4) 오버로딩 불가능
5) const member function로 만들 수 없다.
6) virtual 함수로 꼭 만들어서 사용해야 한다.(동적 바인딩을 위해서)
*정적 메모리 할당, 동적 메모리 할당 vs 정적 바인딩, 동적 바인딩
메모리할당과 바인딩은 다른개념이다. 메모리할당은 변수선언 또는 객체 생성으로 메모리를 잡는것이고, 바인딩은 힙영역의 객체를 참조 또는 포인터로 가르키는 것이다.//수정필요 보지마세여
6. 대입 연산자 함수
1) 포인터를 멤버변수로 갖는 클래스의 경우 4가지를 반드시 해줘야한다.
생성자:동적할당
복사생성자 : 깊은 복사
소멸자:메모리해제
대입연산자 : 깊은 대입
'C++' 카테고리의 다른 글
const (0) | 2018.09.20 |
---|---|
상수란? (0) | 2018.09.20 |
정적 바인딩과 동적 바인딩에 따른 객체 메모리(틀렸음) (1) | 2018.09.12 |
접근 지정자 (0) | 2018.09.12 |
Overloading (0) | 2018.09.12 |