类
来自cppreference.com
类是一种用户定义类型。
类的类型可以由类说明符定义,它在声明语法的 声明说明符序列 中出现。类说明符拥有下列语法:
类关键词 属性 类头名 { 成员说明 }
|
(1) | ||||||||
类关键词 属性 类头名 : 基类说明符序列 { 成员说明 }
|
(2) | ||||||||
类关键词 | - | class、struct、union 之一 |
属性 | - | (C++11 起) 可选的任意数量的属性序列 |
类头名 | - | 被定义的类名。可以前接 嵌套名说明符(名字和作用域解析运算符的序列,以作用域解析运算符结尾),可以后随关键词 final。可以忽略该名字,此时类是无名的(注意无名类不可以是 final 的) |
基类说明符序列 | - | 一个或多个父类及其各自所用的继承模型的列表(见派生类) |
成员说明 | - | 访问说明符、成员对象和成员函数的声明和定义的列表(见类定义) |
类关键词 struct
和 class
在 C++ 中不可分,除了默认访问模式和默认继承模式,当类定义使用 struct
类关键词 则为 public
,若类定义使用 class
类关键词 则为 private
。class
和 struct
均可用于类定义。
使用类关键词 union
所得的是联合体定义,它定义在同一时刻只保有其一个数据成员的类。
类可以拥有下列种类的成员:
1) 数据成员:
b) 静态数据成员
2) 成员函数:
a) 非静态成员函数
b) 静态成员函数
3) 嵌套类型:
所有成员都在类定义中一次性定义,不能向已定义的类添加成员(与命名空间成员不同)
类 T
的成员,如果它是静态数据成员、成员函数、成员类型、成员模板、无作用域枚举的枚举项、匿名成员联合体的成员,那么不能使用 T
作为其名字。然而,非静态数据成员可使用名称 T
,只要没有用户声明的构造函数。
声明或继承了至少一个虚成员函数的类是多态的。此类型的对象是多态对象,并拥有作为其对象表示一部分存储的运行时类型信息,它可以通过 dynamic_cast
和 typeid
查询到。虚成员函数参与动态绑定。
声明或继承了至少一个纯虚函数的类是抽象类。不能创建此类型的对象。
拥有 constexpr 构造函数的类是字面类型 (LiteralType) :此类型的对象能用 constexpr 函数在编译时进行操作。 |
(C++11 起) |
一些成员函数是特殊的:某些条件下,即使用户不定义,编译器也会定义它们。它们是:
(C++11 起) |
(C++11 起) |