C++声明、定义、复杂声明及typedef专题(2)
时间:2026-01-20
时间:2026-01-20
本文对C++的复杂声明,作了深入地道的讲解,对使用typedef化简复杂声时和还原复杂声明也作了深入详细的讲解。
2)、类型决定了可以对该对象进行什么样的操作(比如可以对int型的变量或常量进行加、减、乘、除等操作,不能进字符串变量或常量进行加、减、乘、除等操作)。
3)、类型还决定了对象的内存大小、布局和取值范围
3、每个名字(或变量,变量就是命名后的对象,因此一个变量就是一个名字)、表达式都应有一个类型,这个类型决定了可以对这个名字进行什么样的操作,因此类型决定了这个名字或表达式的使用方式。
4、不能对变量赋予一个类型错误的值。
5、编译器会记录每个变量的类型,并确认对它进行的操作是否与类型相一致。
6、下面介绍一些常见的类型
1)、对象类型:指的是可以根据类型确定内存单元大小的类型,这些类型包括整型、浮点型、字符型、布尔型等,注意,函数类型和不完全类型都是无法确定内存单元大小的,因此都不是对象类型
2)、函数类型:是用于描术函数的,函数类型由其反回值类型,形参数目和形参类型表征,函数一般被称为“反回结果为某类型的函数”。
3)、不完整类型:指的是大小(或成员)不确定的类型,元素数不确定的数组,成员没有定义的结构与联合类型,void类型都是不完整类型,而且void永远都是不完整类型。比如int a[]; struct b;等都是不完整类型,不完整类型可以在其他位置使用完整类型说明使该类型成为完整类型。比如对于struct b;可以在以其他位置使用struct b{...};将其说明为完整类型。
4)、算术类型:包括所有整型与浮点类型,即包括所有整数类型(short, int, long等),字符型、布尔型、枚举型及所有浮点型。
5)、标量类型:是不可再分为其他类型的类型,包括算术类型与指针类型两类,也可认为标量类型是除聚集类型之外的所有类型。
6)、聚集(合)类型:是由标量类型、聚集类型聚合而成的,数组、结构、类类型都属于聚集类型。注意:类中的成员不一定是聚合类型,比如class A{public: intb;}; A ma; 则ma.b的类型不是聚合类型而是int型,因为b是对象ma的成员,他的类型是int型的,不是聚合类型。
四、声明与定义
1、声明是一条语句,声明为对象起了一个名字,同时为名字确定了一个类型。
2、声明的作用:
1)、C++使用声明语句来告诉编译器一个对象的名字,比如int x;表示x是一块类型为int的内存区域的名字。
2)、C++使用声明语句告诉编译器一个对象是什么类型。比如语句int x;就能告诉编译器变量x的类型为int型。一
个命名的对象必须有一个类型,有了具体的类型我们才能确定对对象作出什么样的操作,对象能够接收什么样的值等,C++使用声明语句来实现此目的。
3、定义:定义是一个声明,定义对声明的实体给出了一个完整的描术,也就是说一个定义明确的指明了一个名字代表的是什么。特别地变量的定义会为其分配内存空间。
五、声明与定义的区别及注意事项
1、C++中的名字(标识符)必须先声明后再使用,也就是说在使用前必须先确定它的类型,以通知编译器这个名字所引用的是什么类型的实体。
2、对同一个名字只能定义一次,因为定义为命名对象(比如变量,函数名等)分配了内存,同一名字的对象只能分配一个内存位置,所以只能定义一次。
3、对同一个名字的声明可以有任意多次。
4、对同一个名字的所有声明必须具有相同的类型。
5、区别声明与定义的方法:就是在程序中对同一个标识符声明多次,若语句不出错,则是声明,若出错,则是定义,比如extern int a; extern int a;程序不会出错,因此是声明,而int a; int a;则会出错,因此是定义。注:变量的声明与定义详见后文。
5、任何进行了初始化操作的语句都是定义。
6、每个定义都是一个声明,但声明未必是定义。
7、非定义的声明仅仅告诉编译器程序中有这么一个具有指定类型的名字,因此声明不会为对象分配内存(比如为变量分配内存,为函数指定函数体)。
8、对于变量来说,其声明只说明了类型,而定义则会为该变量分配存储空间。
9、对于函数来说,声明也提供了类型(即参数类型和反回类型),而定义才会提供函数体(即{}括起来的部分)。
10、注意:函数体是被作为程序的一部分而被保存在内存中的,因此函数和变量的定义都消耗了内存,而声明则没有。
11、注意:在声明时,在名字后带一对空的小括号程序会认为这是一个函数,而不是对类调用的默认构造函数(详见后
文),比如hy g(); 其中hy是一个类类型(即class hy{...}),语句hy g();只是表明是对一个函数的声明,而不会是使用默认构造函数创建一个类类型的对象g。
六、声明的语法形式
声明的形式之一:[ [存储类区分符] | [类型限定词] ] <类型区分符> 声明符[, 声明符[, 声明符[, ....]];
…… 此处隐藏:46字,全部文档内容请下载后查看。喜欢就下载吧 ……