Classes
클래스는 사용자 정의 타입입니다.
declaration 구문의 decl-specifier-seq에 있는 클래스-지시자(class-specifier)로 클래스 타입을 정의합니다. 클래스 지시자는 다음의 구문을 가집니다:
class-key attr class-head-name { member-specification }
|
(1) | ||||||||
class-key attr class-head-name : base-specifier-list { member-specification }
|
(2) | ||||||||
class-key | - | class, struct, union 중 하나 |
attr | - | (since C++11) (선택) attributes 들의 연속적인 나열 |
class-head-name | - | 정의하고 있는 클래스의 이름. nested-name-specifier(이름들의 연속적인 나열과 범위 해상도(scope-resolution) 연산자, 범위 해상도(scope-resolution) 연산자로 끝나는) 가 선택적으로 덧붙을 수 있음 , 선택적으로 keyword final이 뒤에 붙을 수도 있습니다. 이름없는 클래스의 경우에는 이름이 생략될 수도 있습니다. (이름없는 클래스는 final 이 될 수 없음에 주의하세요) |
base-specifier-list | - | 한 개 이상의 부모 클래스의 목록과 각각의 상속 모델 (see derived class) |
member-specification | - | 접근 지시자 목록, 멤버 객체와 멤버 함수 선언과 정의 (see class definition) |
기본 access mode�� 기본 상속 mode가 클래스 선언에서 struct
class-key 를 사용하여 public
인 경우이거나 클래스 선언에서 class
class-key를 사용하여 private
인 경우를 제외하고, 클래스 키인 struct
와 class
은 C++에서 특별히 구분하지는 않습니다. class
와 struct
는 클래스 정의에 사용할 수 있습니다..
class-key union
을 사용하면 한 번에 1개의 데이터 멤버만을 가질 수 있는 클래스를 정의하는 union 정의가 됩니다.
클래스는 다음 종류의 멤버를 가질 수 있습니다:
모든 멤버들은 클래스 정의 안에서 즉시 정의되고, namespace 의 멤버와 다르게 이미 정의된 클래스에 멤버를 추가할 수 없습니다.
정적 데이터 멤버, 멤버함수, 멤버 타입, 멤버 템플릿 범위없는 열거형의 열거자, 익명 union 멤버의 멤버는 멤버 이름으로 클래스 자신의 이름을 사용할 수 없습니다. 하지만, 정적이 아닌 데이터 멤버는 사용자 정의 생성자가 없는 경우 클래스 자신의 이름을 사용할 수도 있습니다.
최소 하나 이상 가상 멤버 함수가 선언되거나 상속된 클래스는 다형적입니다. 이 타입의 객체는 다형적 객체 이고 객체 표현의 일부로 저장된 dynamic_cast
와 typeid
로 조회할 수 있는 실행 시간 타입 정보를 갖습니다. 가상 멤버 함수는 동적 바인딩에 포함됩니다.
적어도 한 개 이상의 순수 가상 멤버 함수를 선언하거나 상속한 클래스는 추상 클래스입니다. 이 타입의 객체를 생성할 수 없습니다.
constexpr 생성자를 가진 클래스는 LiteralType 입니다: 이 타입의 객체는 컴파일할 때 constexpr 함수로 처리될 수 있습니다. |
(since C++11) |
일부 멤버 함수는 특수합니다: 특정 조건하에서 이 멤버 함수들은 사용자가 정의하지 않더라도 컴파일러에 의해 정의됩니다.
(since C++11) |
(since C++11) |