C++自定义数据类型学习笔记八
定义自己的数据类型,使用关键之typedef,形式为:
typedef existing_type new_type_name;
"existing_type是C++基本数据类型或者其他已经被定义了数据类型,
new_type_name是我们将要定义的新数据类型的名称。例如:
typedef char C;
typedef unsigned int WORD;
typedef char * string_t;
typedef char field [50];
使用上面定义好的类型,例子:
C achar, anotherchar, *ptchar1;
WORD myword;
string_t ptchar2;
field name;"
联合
"联合使得同一段内存可以被按照不同的数据类型来访问,数据实际是存储在同一个位置的。声明形式:
union model_name {
type1 element1;
type2 element2;
type3 element3;
type4 element4;
.
.
} object_name;
union 中的所有被声明的元素占据同一段内存空间,其大小取声明中最长的元素的大小。"
union 的用途之一是将一种较长的基本类型与由其它比较小的数据类型组成的结构或数组联合使用。例如:
"union mix_t {
long l;
struct {
short hi;
short lo;
} s;
char c[4];
} mix;
以上例子中定义了3个名称:mix.l, mix.s 和 mix.c,我们可以通过这3个名字来访问同一段4 bytes长的内存空间。至于使用哪一个名字来访问,取决于我们想使用什么数据类型,是long, short 还是 char 。"
匿名联合
如果我们将一个union包括在一个结构(structure)的定义中,并且不赋予它object名称 (就是跟在花括号{}后面的名字),这个union就是匿名的。
"例如:
struct {
char title[50];
char author[50];
union {
float dollars;
int yens;
};
} book;
访问方式:
book.dollars
book.yens"
枚举
枚举可以用来生成一些任意类型的数据,不只限于数字类型或者字符类型,甚至常量true和false。定义形式如下:
"enum model_name {
value1,
value2,
value3,
.
.
} object_name;"
"例子:
enum colors_t {black, blue, green, cyan, red, purple, yellow, white};"
枚举数据类型在编译时是被编译为整型数值的,而它的数值列表可以是任何指定的整型常量 。如果没有指定常量,枚举中第一个列出的可能值为0 ,后面的每一个值为前面一个值加1。
如果我们在定义枚举数据类型的时候明确指定某些可能值(例如第一个)的等价整数值,后面的数值将会在此基础上增加,例如:
enum months_t { january=1, february, march, april,
may, june, july, august,
september, october, november, december} y2k;
在这个例子中,枚举类型months_t的变量y2k 可以是12种可能取值中的任何一个,从january 到 december ,它们相当于数值1 到 12
定义自己的数据类型,使用关键之typedef,形式为:
typedef existing_type new_type_name;
"existing_type是C++基本数据类型或者其他已经被定义了数据类型,
new_type_name是我们将要定义的新数据类型的名称。例如:
typedef char C;
typedef unsigned int WORD;
typedef char * string_t;
typedef char field [50];
使用上面定义好的类型,例子:
C achar, anotherchar, *ptchar1;
WORD myword;
string_t ptchar2;
field name;"
联合
"联合使得同一段内存可以被按照不同的数据类型来访问,数据实际是存储在同一个位置的。声明形式:
union model_name {
type1 element1;
type2 element2;
type3 element3;
type4 element4;
.
.
} object_name;
union 中的所有被声明的元素占据同一段内存空间,其大小取声明中最长的元素的大小。"
union 的用途之一是将一种较长的基本类型与由其它比较小的数据类型组成的结构或数组联合使用。例如:
"union mix_t {
long l;
struct {
short hi;
short lo;
} s;
char c[4];
} mix;
以上例子中定义了3个名称:mix.l, mix.s 和 mix.c,我们可以通过这3个名字来访问同一段4 bytes长的内存空间。至于使用哪一个名字来访问,取决于我们想使用什么数据类型,是long, short 还是 char 。"
匿名联合
如果我们将一个union包括在一个结构(structure)的定义中,并且不赋予它object名称 (就是跟在花括号{}后面的名字),这个union就是匿名的。
"例如:
struct {
char title[50];
char author[50];
union {
float dollars;
int yens;
};
} book;
访问方式:
book.dollars
book.yens"
枚举
枚举可以用来生成一些任意类型的数据,不只限于数字类型或者字符类型,甚至常量true和false。定义形式如下:
"enum model_name {
value1,
value2,
value3,
.
.
} object_name;"
"例子:
enum colors_t {black, blue, green, cyan, red, purple, yellow, white};"
枚举数据类型在编译时是被编译为整型数值的,而它的数值列表可以是任何指定的整型常量 。如果没有指定常量,枚举中第一个列出的可能值为0 ,后面的每一个值为前面一个值加1。
如果我们在定义枚举数据类型的时候明确指定某些可能值(例如第一个)的等价整数值,后面的数值将会在此基础上增加,例如:
enum months_t { january=1, february, march, april,
may, june, july, august,
september, october, november, december} y2k;
在这个例子中,枚举类型months_t的变量y2k 可以是12种可能取值中的任何一个,从january 到 december ,它们相当于数值1 到 12