第7章 自定义数据类型

 

7 自定义数据类型

7.1结构structure

定义一组数据,组合起来表示一种类型,:

struct point

{

         double x;

         double y;

};

 

7.1.1结构的定义

语法如下:

struct 结构名

{

         成员列表

};

结构可以包含多个数据成员(data member),他们在“{}”之间定义,可以定义没有任何成员的结构

 

7.1.2 定义结构变量

结构为编译器引入了一个新的类型,可以定义属于某个结构的变量,如:

point p1;

point p2,p3;

也可以定义point结构的指针变量引用变量,如:

point *pp = &p1;

point &p4 = p2;

这里定义了一个指针变量pp,他指向p1的对象。

也可以使用new来动态创建一个结构:

int* ip = new int;

point *pp = new point;

 

7.1.3结构的数据成员

数据成员类型可以是 基本类型、复合类型(数组、指针、引用),扩展结构(结构、联合、枚举、类)

 

7.1.4结构成员的引用

可以使用“.”来引用某个结构实例的成员,如:

point p1;

p1.x = 100;

p1.y = p1.x;

指向结构对象的指针,如:

point *pp = &p1;

(*pp).x = 100;

(*pp).y = (*pp).x

针对指针,完全可以使用另外一种方式替换以上繁琐的方法:

pp->x = 100;

pp->y = pp->x;

->”作用在结构指针上,同样用以引用结构的成员

 

7.1.5结构的初始化

如:point p1={100,200};

结构的初始值可以少于其成员的个数,未被覆盖的数据成员会被初始化为0

point p2 = {100};// ok, p2.y=0

常见错误:

使用了未初始化的结构成员

制订了太多的初始值

 

7.1.6位域bit fields

定义结构时,可以指定每个数据成员所占的比特位数(bits),这时数据成员则可以称作位域,如:

struct compacttime

{

         unsigned hour : 5;   //5bits,0-31

         unsigned minute : 6;  //6 bits, 0-63

         unsigned second 6; //6 bits,0-63

};

cout<<sizeof(compactime)<<endl;

输出结果为4,小于未定义之前的12字节,位域可以实现讲一个字节掰成几块来用

 

7.2联合union

7.2.1定义

联合的所有成员公用一块内存,如:

union mypoint

{

         double x;

         double y;

};

联合由关键词“union”指定

 

7.2.2使用联合

联合各成员的字节长度不必相等,其占用空间取决与其中最常的成员。

7.3枚举enumeration

7.3.1枚举定义

习惯上,枚举常量的名字总是大写

 

7.3.2枚举与int

枚举值的第一个成员对应于证书0,第二个为1,依此类推。

也可以手动指定每个枚举值

 

7.4 typedof

typedef提供了为某种既有类型取别名的功能,如:

typedef Point Point1; //ok,位同一个类型定义多个别名

typedef Point1 Point2 ;//ok,可以为别名在定义别名

typedef也可以为指针类型定义别名

 

7.5 数据类型修饰符

7.5.1 const(constant)

称为常量,或常数变量,注意与字面常量的区别。const变量还是一个变量,具有自己的内存地址,不过它的值不能被更改。

必须要定义的时候进行初始化,如:

const int I =100; //ok

 

区分:指针常量是该指针是一个常量;常量指针是指向常量的指针

int* ip0=&i;      //const

int * const ip1 = &i;          //const修饰int*

int const * ip2 =&i;           //const修饰Int

const int * ip3 = &i;          // const修饰Int

const int * const ip4 = &i;        // const同时修饰ip4ip4*

ip1是指针常量,ip1指针不能被指来指去

ip2ip3是常量指针,本身可以被指来指去,但是指向内容制度,不能被修改

ip4综合了2种特点。

指向const的指针不能被赋给指向非const的指针,如:

int *ip5 =ip2;//error:初始化:无法从const int*转换为int *

 

7.5.2 volatile

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值