이름공간
변수
행위

Classes

cppreference.com
< cpp‎ | language
 
 
C++ 언어
General topics
Flow control
Conditional execution statements
Iteration statements
Jump statements
Functions
function declaration
lambda function declaration
function template
inline specifier
exception specifications (deprecated)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
decltype specifier (C++11)
Specifiers
cv specifiers
storage duration specifiers
constexpr specifier (C++11)
auto specifier (C++11)
alignas specifier (C++11)
Initialization
Literals
Expressions
alternative representations
Utilities
Types
typedef declaration
type alias declaration (C++11)
attributes (C++11)
Casts
implicit conversions
const_cast conversion
static_cast conversion
dynamic_cast conversion
reinterpret_cast conversion
C-style and functional cast
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
class template
function template
template specialization
parameter packs (C++11)
Miscellaneous
Inline assembly
 
 

클래스는 사용자 정의 타입입니다.

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인 경우를 제외하고, 클래스 키인 structclass은 C++에서 특별히 구분하지는 않습니다. classstruct클래스 정의에 사용할 수 있습니다..

class-key union 을 사용하면 한 번에 1개의 데이터 멤버만을 가질 수 있는 클래스를 정의하는 union 정의가 됩니다.

클래스는 다음 종류의 멤버를 가질 수 있습니다:

1) 데이터 멤버:
2) 멤버 함수:
3) 중첩 타입(nested types):
a) 함수 정의 안에 정의된 중첩 클래스열거형
b) typedef 혹은 type alias (since C++11) 선언으로 정의된 기존 타입의 별칭(alias)
c) (constructor에서 사용하는 경우를 제외하고) 클래스 정의 안에서 자기 클래스의 이름은 lookup의 목적으로 자기 자신에 대한 public 타입 별칭처럼 동작합니다.: 이것은 injected-class-name으로 알려져 있습니다
4) 열거형 from all unscoped enumerations defined within the class, or introduced by using-declarations or using-enum-declarations (since C++20)
5) 멤버 템플릿 (variable 템플릿 (since C++14)클래스 템플릿이나 함수 템플릿)은 어떤 지역적이 아닌(non-local) class/struct/union 의 선언 내용에 나타날 수 있습니다.

모든 멤버들은 클래스 정의 안에서 즉시 정의되고, namespace 의 멤버와 다르게 이미 정의된 클래스에 멤버를 추가할 수 없습니다.

정적 데이터 멤버, 멤버함수, 멤버 타입, 멤버 템플릿 범위없는 열거형의 열거자, 익명 union 멤버의 멤버는 멤버 이름으로 클래스 자신의 이름을 사용할 수 없습니다. 하지만, 정적이 아닌 데이터 멤버는 사용자 정의 생성자가 없는 경우 클래스 자신의 이름을 사용할 수도 있습니다.

최소 하나 이상 가상 멤버 함수가 선언되거나 상속된 클래스는 다형적입니다. 이 타입의 객체는 다형적 객체 이고 객체 표현의 일부로 저장된 dynamic_casttypeid 로 조회할 수 있는 실행 시간 타입 정보를 갖습니다. 가상 멤버 함수는 동적 바인딩에 포함됩니다.

적어도 한 개 이상의 순수 가상 멤버 함수를 선언하거나 상속한 클래스는 추상 클래스입니다. 이 타입의 객체를 생성할 수 없습니다.

constexpr 생성자를 가진 클래스는 LiteralType 입니다: 이 타입의 객체는 컴파일할 때 constexpr 함수로 처리될 수 있습니다.

(since C++11)

일부 멤버 함수는 특수합니다: 특정 조건하에서 이 멤버 함수들은 사용자가 정의하지 않더라도 컴파일러에 의해 정의됩니다.

(since C++11)
(since C++11)