< cpp‎ | language

类是一种用户定义类型。

类的类型可由类说明符定义,它在声明语法的 声明说明符序列 中出现。类说明符拥有下列语法:

类关键词 attr 类头名 { 成员说明 } (1)
类关键词 attr 类头名 : 基类说明符序列 { 成员说明 } (2)
类关键词 - classstructunion 之一
attr(C++11) - 可选的任意数量的属性序列
类头名 - 被定义的类名。可选地前接 嵌套名说明符(名字和作用域解析运算符的序列,以作用域解析运算符结尾),可选地后随关键词 final。可以忽略该名字,此情况下类是无名的(注意无名类不可为 final)
基类说明符序列 - 一或多个父类及其各自所用的继承模型的列表(见派生类
成员说明 - 访问说明符、成员对象和成员函数的声明和定义的列表(见类定义

类关键词 structclass 在 C++ 中不可分,除了默认访问模式和默认继承模式,当类定义使用 struct 类关键词 则为 public,若类定义使用 class 类关键词 则为 privateclassstruct 均可用于类定义

使用类关键词 union 所得的是联合体定义,它定义在同一时刻只保有其一个数据成员的类。

类可拥有下列种类的成员

1) 数据成员
2) 成员函数
3) 嵌套类型
a) 定义于类定义之中的嵌套类枚举
b) 既存类型的别名,以 typedef 类型别名 (C++11 起)声明定义
c)查找而言(除非在用作构造函数名时),类的名字在该类自身的定义中,表现为一个作为其自身的类型别名的公开成员:这被称作注入类名
4) 来自定义于类中的所有无作用域枚举,或由 using 声明using enum 声明引入 (C++20 起)枚举项
5) 成员模板变量模板、 (C++14 起)类模板或函数模板)可出现于任何非局部 class/struct/union 定义体内。

所有成员都在类定义中一次性定义,不能向已定义的类添加成员(这不同于命名空间的成员)

T 的成员,若它是静态数据成员、成员函数、成员类型、成员模板、无作用域枚举的枚举项、匿名成员联合体的成员,则不能使用 T 作为其名字。然而,非静态数据成员可使用名称 T ,只要无用户声明的构造函数。

声明或继承了至少一个成员函数的类是多态的。此类型的对象是多态对象,并拥有作为其对象表示一部分存储的运行时类型信息,可以由 dynamic_casttypeid 查询之。虚成员函数参与动态绑定。

声明或继承了至少一个纯虚函数的类是抽象类。不能创建此类型的对象。

拥有 constexpr 构造函数的类是字面类型 (LiteralType) :此类型的对象能用 constexpr 函数在编译时进行操作。

(C++11 起)

一些成员函数是特殊的:某些条件下,即使用户不定义,编译器也会定义它们。它们是:

(C++11 起)
(C++11 起)