C++标准ISO-IEC-14882-2003:第9章:类-第2节:类的成员
来源:互联网 发布:java默认修饰符 编辑:程序博客网 时间:2024/05/22 10:00
9.2 类的成员
类描述:
成员声明 类描述opt
访问描述符 : 类描述opt
成员声明:
声明描述符序列opt 成员声明器列表opt ;
函数定义 ;opt
::opt嵌套名字声明 templateopt未限定的标识符 ;
using-声明
模板声明
成员声明器列表:
成员声明器
成员声明器列表, 成员声明器
成员声明器:
声明符 纯虚描述符opt
声明符 常量初始化器opt
标识符opt : 常量表达式
纯虚描述符:
= 0
常量初始化器:
= 常量表达式
1. 类定义中的类描述声明了该类的全部成员。其他任何地方都不能再插入成员。类的成员包括:数据成员、成员函数、嵌套类型、枚举器。数据成员和成员函数包括静态和非静态的;嵌套类型包括类中定义的类和枚举。类中定义的枚举类型的枚举器是类的成员。除了用来声明友元或引入基类的成员名字,成员声明声明了类的成员,并且每个成员的声明都声明至少一个类的成员。类的类描述中,每个成员不能声明2次,除非是嵌套类或成员类模板可以被先声明然后再定义。
2. 在类描述符的结尾}处,类被看做一个已完全定义好的对象类型(即完整类型)。在类的类描述之内,类在函数体、默认参数和构造函数的构造初始化器(包括嵌套类的这些东西)中被认为是完整类型。否则,在类描述之内它会被当做不完整类型。
3. 【注:如果参数不同,一个名字可以用来表示多个成员函数。】
4. 只有当声明一个静态整型常量或枚举常量的时候,成员声明器中才可以包含常量初始化器。
5. 成员可以使用构造函数来初始化。
6. 成员不能是auto、extern、register类型。
7. 声明描述符序列只能在构造函数、析构函数和类型转换函数中省略。成员声明列表只能在带friend关键字的类描述符、枚举描述符、声明描述符序列之后省略。纯虚描述符只能在虚函数的声明中使用。
8. 非静态成员如果是某个类的对象,那么这个类应该在先前就已经定义好。特别的是,类cl不能包含cl类型的对象,但是可以包含cl类型的指针或引用。当数组作为非静态成员的类型时,其所有的维度都必须指定大小。
9. 除了构造指针的指针、该类(或其派生类)的非静态成员函数中、该类(或其派生类)的构造函数的成员初始化器中,类的非静态数据成员或成员函数只能用类成员访问语法来表示。
10. 【注:非静态成员函数是个普通的函数类型,非静态数据成员是个普通的对象类型。没有特殊的成员函数类型或数据成员类型。】
11. 【例:一个简单的类定义如下:
struct tnode {
char tword[20];
int count;
tnode *left;
tnode *right;
};
包含了一个20字符的数组,一个整数,两个指向相似结构的指针。一旦这样定义了,
tnode s, *sp;
将s声明为一个tnode类型的结构,sp是一个指向tnode类型的指针。这些声明,sp->count表示sp指针指向的对象的count成员;s.left表示结构s的左子树指针;s.right->tword[0]表示s的右子树的tword成员的第一个字符。】
12. 声明了没有干扰的访问描述符的(非联合的)类,它的非静态数据成员被分配空间,这样后面的成员在类对象内部有更高的地址。被访问描述符隔开的非静态数据成员的空间分配顺序是未定义的。实现地址对齐的需求会导致两个相邻的成员不一定紧接着分配空间;管理虚函数和虚基类的需求也一样。
13. 如果T是类的名字,下列实体的名字必须与T不同:
a) T的每个静态数据成员
b) T的每个成员函数【注:不包括构造函数,因为它没有名字。】
c) T的每个类型成员
d) T的每个枚举类型成员的枚举器
e) T的每个匿名联合成员
13a 除此之外,如果T有一个用户定义的构造函数,那么T的每个非静态数据成员的名字都不能与T相同。
14. 如果两个平凡结构有相同数量的非静态成员,且对应的非静态数据成员的内存布局依次兼容,那么这两个结构的内存布局就是兼容的。
15. 如果两个平凡联合有相同数量的非静态成员,且对应的非静态数据成员的内存布局依次(如果有序的话)兼容,那么这两个结构的内存布局就是兼容的。
16. 如果一个平凡联合包含两个或多个共享同一初始序列的平凡结构,并且该平凡联合对象当前包含这些平凡结构之一,那么就可以通过其中任意一个平凡结构来访问共享的初始序列部分。如果两个平凡结构的一个或多个起始成员的相应内存布局兼容(对位域来说要有相同的宽度),那么它们俩共享一个初始序列。
17. 指向平凡类型的指针,经过用reinterpret_cast合适地转换,指向它的起始成员(如果该成员是位域,就只想它所在的存储单元);反之亦然。【注:因此,在平凡结构对象内部就可能因为制造合适的对齐而形成无名填充区,但该区肯定不能在对象的起始处。】
- C++标准ISO-IEC-14882-2003:第9章:类-第2节:类的成员
- C++标准ISO-IEC-14882-2003:第9章:类-第3节:成员函数
- C++标准ISO-IEC-14882-2003:第12章:类的特殊成员函数-第2节:临时对象
- C++标准ISO-IEC-14882-2003:第12章:类的特殊成员函数-第1节:构造函数
- C++标准ISO-IEC-14882-2003:第12章:类的特殊成员函数-第3节:类型转换
- C++标准ISO-IEC-14882-2003:第12章:类的特殊成员函数-第4节:析构函数
- C++标准ISO-IEC-14882-2003:第12章:类的特殊成员函数-第5节:自由存储管理
- C++标准ISO-IEC-14882-2003:第12章:类的特殊成员函数-第6节:初始化
- C++标准ISO-IEC-14882-2003:第12章:类的特殊成员函数-第8节:拷贝对象
- C++标准ISO-IEC-14882-2003:第9章:类 -第1节:类名
- C++标准ISO-IEC-14882-2003:第12章:类的特殊成员函数-第7节:构造与析构
- C++标准ISO-IEC-14882-2003:第14章:模板-第1节:模板的参数
- C++标准ISO-IEC-14882-2003:第14章:模板-第2节:模板特化的名字
- C++标准ISO-IEC-14882-2003:第14章:模板
- C++标准ISO-IEC-14882-2003:第14章:模板-第3节:模板实参
- C++标准ISO-IEC-14882-2003:第14章:模板-第4节:类型等价
- ISO IEC公开的标准
- 4.1 左值到右值的转换 中英文对照(C++标准中文版 ISO/IEC 14882:2014)
- 新型机器人有表情:可展现喜怒哀乐(组图)
- 自然界十大奇异植物:迷幻类植物拥有美丽外表
- 十个糟糕的程序员的行为
- VC中利用多线程技术实现线程之间的通信
- 双子心目中最重要的事
- C++标准ISO-IEC-14882-2003:第9章:类-第2节:类的成员
- Flex 文字+图片倒影
- 双子的孤独是一种绝症
- Oracle数据库SQL语句性能调整的基本原则
- linux 下对 flash 设备操作的应用程序(嵌入式参考用)
- ubuntu下apach,mysql,php安装、配置
- 从搜索引擎开发看国人的创新能力
- Eclipse源代码分析
- ubuntu下进行网络配置