[이것이 C++이다] Part 02. 객체지향 프로그래밍 (1)
Part 02. 객체지향 프로그래밍
Chapter 03. 클래스
- 객체지향 프로그래밍의 개념을 이해합니다.
- 클래스
- 생성자와 소멸자
- 메서드
3.1 객체지향 프로그래밍 개요
- C++ 객체지향 프로그래밍
- 사용자의 편의성을 극대화 해야 합니다.
- 사용자의 실수 가능성을 제작자가 차단해야 합니다.
3.2 클래스 기본 문법
- 클래스는 ‘함수를 포함하는 구조체’로 표현할 수 있습니다.
- 다만, 구조체와 다른 점은 접근 제어 지시자로 멤버 접근을 통제할 수 있는 것과 생성자로 ‘제작자’가 멤버를 초기화 할 수 있다는 것입니다.
3.2.1 멤버 선언 및 정의
- 생성자
- 반환 자료형이 없습니다.
- 호출되는 시점이 문법적으로 정해져 있습니다.
-
클래스 함수 선언과 정의를 분리할 수 있습니다.
- 멤버 변수 초기화
- 초기화 목록 사용할 수 있습니다. 이 때, 멤버변수가 참조자 형식이면 반드시 초기화 목록을 이용해 초기화 해야 합니다.
- C11 부터 선언과 동시에 멤버 변수를 초기화 할 수 있습니다.
3.2.2 접근 제어 지시자
- 기본은 private
- 생성자도 접근 제어 지시자의 영향을 받습니다.
3.3 생성자와 소멸자
- 생성자와 소멸자는 반환 형식이 없고, 문법적으로 호출되는 시점이 정해져 있는 함수입니다.
- 생성자는 다중 정의(오버로딩)할 수 있지만 소멸자는 그럴 수 없습니다.
3.3.1 동적 객체의 생성과 소멸
-
배열로 작성한 객체들은 반드시 배열로 삭제해야 합니다.
CTest *pData = new CTest[3]; delete[] pData;
3.3.2 참조 형식 멤버 초기화
- 참조자는 반드시 선언과 동시에 초기화 해야 합니다. 이 때, 반드시 생성자 목록을 사용해 초기화 해야 합니다.
- 단순 대입 연산자와 초기화의 의미를 구분합시다.
- 사라질 코드에 대한 주의를 기울여야 합니다.
3.3.3 생성자 다중 정의
3.3.4 명시적 디폴트 생성자
3.4 메서드
- 일반 / 상수화(const) / 정적(static) / 가상(virtual)
3.4.1 this 포인터
- hidden parameter
3.4.3 상수형 메서드
- 상수형 메서드 원리는 this 포인터를 상수형 포인터로 변경하는 것 입니다.
const CTest *this;
-
멤버 변수에 접근은 가능하지만 쓰기는 허용되지 않는 메서드 입니다.
int getdata() const { return m_ndata; // 멤버 변수의 값은 읽을 수 있지만 쓸 수 없다. (대입도 안됨) }
3.4.5 상수형 메서드의 예외 사항
- mutual
- const_cast<새 형식=""> (대상)새>
3.4.6 멤버 함수 다중 정의
-
함수의 다중 정의는 사용자가 호출 실수를 범할 수 있으므로 delete 예약어를 사용애 명시적으로 디폴트 메서드를 삭제하는 것이 더 좋을 때도 있습니다.
void setdata(double dparam) = delete;
3.5 정적 멤버
- 정적 멤버 함수는 인스턴스를 선언하지 않고, 직접 호출할 수 있습니다. 그러나 this 포인터를 사용할 수 없습니다.
- 정적 멤버 변수는 반드시 선언과 정의를 분리해야 합니다.