类
来自 cppreference.cn
类是用户定义的类型。
类类型由类说明符定义,该说明符出现在 decl-specifier-seq 的 声明 语法中。有关类说明符的语法,请参见 类声明。
一个类可以具有以下类型的成员
1) 数据成员
b) 静态数据成员
2) 成员函数
a) 非静态成员函数
b) 静态成员函数
3) 嵌套类型
所有成员都在类定义中一次性定义,它们不能添加到已定义的类中(与命名空间的成员不同)
如果类 T
的成员是以下类型,则不能使用 T
作为其名称
- 静态数据成员,
- 成员函数,
- 成员类型,
- 成员模板,
- 枚举的枚举器 (除非枚举是作用域枚举)(自 C++11 起),或
- 成员匿名联合体的成员。
但是,只要没有用户声明的构造函数,非静态数据成员可以使用名称 T
。
具有至少一个声明或继承的 虚 成员函数的类是多态的。这种类型的对象是 多态对象,并且具有作为对象表示一部分存储的运行时类型信息,可以使用 dynamic_cast
和 typeid
查询。虚成员函数参与动态绑定。
具有至少一个声明或继承的纯虚成员函数的类是抽象类。无法创建此类型的对象。
(自 C++11 起) |
目录 |
[编辑] 类的属性
可平凡复制类可平凡复制类是一个类,它
标准布局类标准布局类是一个类,它
标准布局结构体是用类关键字 struct 或类关键字 class 定义的标准布局类。标准布局联合体是用类关键字 union 定义的标准布局类。 |
(自 C++11 起) |
[编辑] 隐式生命周期类
隐式生命周期类是一个类,它
注意:隐式生命周期属性由缺陷报告 P0593R6 澄清。
[编辑] POD 类POD 类是一个类,它
POD 结构体是非联合 POD 类。POD 联合体是 POD 类的联合体。 |
(在 C++20 中已弃用) |
[编辑] 缺陷报告
以下行为变更的缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
CWG 148 | C++98 | POD 类不能包含指向成员的指针, 它们本身是 POD(标量)类型 |
限制已移除 |
CWG 383 | C++98 | 复制赋值运算符或析构函数可能是 如果未定义,则在 POD 类中用户声明 |
不允许 |
CWG 1363 | C++11 | 一个同时具有平凡默认构造函数和非平凡 默认构造函数的类可能是平凡的 |
它是非平凡的 |
CWG 1496 | C++11 | 一个只有构造函数的类 全部定义为已删除的可能是平凡的 |
它是非平凡的 |
CWG 1672 | C++11 | 一个类可能是标准布局类 如果它有多个空基类 |
它不是标准布局类 |
CWG 1734 | C++11 | 一个可平凡复制的类可能没有非平凡的 已删除的复制/移动构造函数/赋值运算符 |
如果已删除,则可以是平凡的 |
CWG 1813 | C++11 | 如果一个类具有 继承非静态数据成员的基类 |
它可以是标准布局类 |
CWG 1881 | C++11 | 对于标准布局类及其基类, 未命名的位域可能在 声明数据成员的不同类中声明 |
所有非静态数据成员 和位域需要首先 在同一个类中声明 |
CWG 1909 | C++98 | 成员模板可能与其类同名 | 禁止 |
CWG 2120 | C++11 | 用于确定标准布局类的 M(X) 定义 没有考虑以下情况 第一个成员是数组的类 |
在以下方面解决了这种情况 M(X) 的定义 |
CWG 2605 | C++98 | 隐式生命周期类可能具有用户提供的析构函数 | 禁止 |