ad

《C++程序开发案例课堂》_了解C++的更好途径_3.5 自定义数据类型

admin 144 2023-11-01

【摘要】 本书摘自《C++程序开发案例课堂》一书中第3章,第5节,由刘春茂、李琪编著。

3.5 自定义数据类型

在现实生活中,信息的概念可能是长度、数量、面积等。在 C++ 语言中,信息被抽象为 int、float和 double 等基本数据类型。从基本数据类型名称上,不能够看出其所代表的物理属 性,并且int、float 和 double 为系统关键字,不可以修改。

为了解决用户自定义数据类型名称的需求, C++ 语言中引入类型重定义语句 typedef, 可 以将已有的类型名用新的类型名代替,从而丰富数据类型所包含的属性信息。

typedef的语法描述如下:

typedef 类型名称类型标识符;

《C++程序开发案例课堂》_了解C++的更好途径_3.5 自定义数据类型

typedef 为系统保留字,“类型名称”为已知数据类型名称,包括基本数据类型和用户自 定义数据类型; "类型标识符"为新的类型名称。

例如:

定义新的类型名称之后,可以像基本数据类型那样定义变量。例如:

typedef 的主要应用有如下几种形式。

(1)为基本数据类型定义新的类型名。

(2)为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称。

(3)为数组定义简洁的类型名称。

(4)为指针定义简洁的名称。 typedef主要有以下一些用途。

(1)定义一种类型的别名,而不只是简单的宏替换,可以用来同时声明指针型的多个对 象。例如:

char* pa, pb;

这个声明只声明了一个字符指针pa 和字符变量pb, 而不是声明了两个字符指针。 以下使用 typedef,可以声明两个字符指针:

虽然使用以下语句也可行:

char *pa,*pb;

但相对来说没有用 typedef的形式直观,尤其在需要大量指针的地方, typedef的方式更省事。 (2)在旧的C 代码中,声明 struct 新对象时,必须要带上struct, 即形式为“struct 结构

名对象名”,如:

而在C++ 中,则可以直接写“结构名对象名”,即

tagPOINT1 p1;

为了简化 struct的定义,在C++ 中使用 typedef来定义:

这样就比原来的方式少写了一个 struct, 比较省事,尤其在大量使用的时候。

或许,在C++ 中 typedef的这种用途并不是很大,但是理解了它,对掌握以前的旧代码还 是有帮助的。

( 3 ) 用typedef来定义与操作系统无关的类型。比如,定义一个叫 REAL 的浮点类型,在 目标操作系统1上,让它表示最高精度的类型为:

typedef long double REAL;

在不支持 long double 的操作系统2上,改为:

typedef double REAL;

在连 double 都不支持的操作系统3上,改为:

typedef float REAL;

也就是说,当跨平台时,只要改一下 typedef 本身就行,不用对其他源码做任何修改。 标准库就广泛使用了这个技巧,比如 size t。

另外,因为 typedef是定义了一种类型的新别名,不是简单的字符串替换,所以它比宏有 更好的稳定性。

(4)为复杂的声明定义一个新的简单的别名。方法是:在原来的声明里逐步用别名替换 一部分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化 版。举例如下。

① 原声明:

int *(*a[5])(int,char*);

变量名为a, 直接用一个新别名pFun 替 换a 就可以了:

typedef int *(*pFun)(int,char*);

原声明的最简化版为:

pFun a[5];

② 原声明:

void (*b[10])(void(*)());

变量名为b, 先替换右边部分括号里的,pFunParam 为别名一;

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《C++程序开发案例课堂》_了解C++的更好途径_9.1.3 结构体数组初始化
下一篇:《C++程序开发案例课堂》_了解C++的更好途径_10.2 认识类
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×