Professional C++ - C++의 객체지향 언어 특성 소개 + 프로그램 만들기 (Ch1, Part 3-6)
1.3.1 클래스 정의
- Class: 객체의 특성을 정의
- Class 선언 코드는 헤더파일 (.h) 파일에 작성
- Class 구현 코드는 소스파일 (.cpp, .cc) 파일에 작성
- Data member와 method 구현 필요
- public, protected, private으로 구분됨.
- public: 클래스 외부에서 접근 가능
- protected: 클래스 상속 관계시 접근 가능
- private: 클래스 내부에서만 접근 가능
- 외부에서 접근하게 하려면 getter / setter 함수를 만들면 됨.
- Data member는 보통
m
을 앞에 붙여서 표시함. (data member)
- public, protected, private으로 구분됨.
- Class를 생성하는 생성자 (constructor)가 필요.
- default constructor, copy constructor, parameterized constructor가 있음.
- default: 기본 생성자
- copy constructor: 동일한 class의 다른 instance의 내용을 기반으로 새로운 instance를 만드는 것. 이 때, 포인터의 값들은 깊은 복사가 되야한다. (참조 링크)
- parameterized constructor: 특정한 방식으로 class를 초기화 하는 방법
- member initialiser list를 쓰는것이 깔끔하고 보기 좋음.
- default constructor, copy constructor, parameterized constructor가 있음.
- Class를 파괴하는 소멸자 (destructor)도 필요.
- Raw pointer를 사용했으면 destructor에서 포인터 해제를 해줘야함.
- 외부 API를 통해서 포인터 작업을 했으면 그것 역시 해제를 해줘야함 (e.g. OpenGL context, GPU 메모리…)
- 이런게 없으면 안적어도 됨.
1 |
|
1.3.2 클래스 사용하기
- Class의 instance는 두가지 방법으로 만들 수 있음
- Stack
- Heap
1 | class someClass |
1.4 Uniform 초기화
- 종종 실수로 함수에 변수가 들어가면서 타입이 축소화 될 때가 있다.
- e.g. double -> int
- 이 경우에는 정보가 손실되고, 컴파일러 에러 없이 예기치 못한 에러가 생길 수 있다. (최신 컴파일러는 왠만하면 경고 주는듯)
- 안전하게 하는 방법은 uniform initalization이다.
- Class 초기화를 할 때 유용하다.
1 | void foo(int i ){ /*... */ }; |
Related Posts