클래스 선언
클래스란,
객체 지향 프로그래밍의 특징 중 하나인 추상화(abstraction)를 사용자 정의 타입으로 구현한 것이다.
c++에서 이러한 클래스를 선언하는 방법은 구조체를 선언하는 방법과 거의 같다.
구조체는 struct 키워드를 사용하지만, 클래스는 class 키워드와 접근 제어 지시자를 함께 사용한다.
접근 제어 지시자는 객체 지향 프로그래밍의 특징 중 하나인 정보 은닉(data hiding)을 위한 키워드이다.
정보 은닉(data hiding)
c++에서 구조체의 모든 멤버는 외부에서 언제나 접근 할 수 있다.
하지만, 클래스는 객체지향 프로그래밍의 기본 규칙 중 하나인 정보 은닉에 대해서도 생각해야한다.
정보 은닉이란 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다는 개념
접근 제어(access control)
C++에서는 세가지 접근 제어 지시자를 제공한다.
- public - 구조체 및 공용체는 다 public
- private - 클래스의 기본 접근 제어 권한
- protected
protected 접근 제어 지시자
c++ 클래스는 private 멤버로 정보를 은닉하고, public 멤버로 사용자나 프로그램과의 인터페이스를 구축한다.
여기서 파생 클래스(derived class)와 관련된 접근 제어 지시자가 하나 더 존재한다.
protected 멤버는 파생 클래스에 대해서는 public 멤버처럼 취급되며,
외부에서는 private 멤버처럼 취급한다.
this 포인터
해당 멤버 함수를 호출한 객체를 가리키게 되며, 호출된 멤버 함수의 숨은 인수로 전달된다.
이렇게 하면 호출된 멤버 함수는 자신을 호출한 객체가 무엇인지 정확히 파악할 수 있다.