2.9、枚举名,结构名和联合名都是类型名
C++语言中,枚举名,结构名和联合名都是类型名(及类名)。当实例变化时,不必在一个枚举名或结构名之前再加上enum,struct,union(class)。
enum Traffic {red,green,yellow};
struct String {
char * str;
int length; };
当实例化为变量时,可以使用
Traffic light;
String str1;
不必写为
enum Traffic light;
struct String str1;
匿名联合是可以在结构内定义没有名字的联合。
2.10 、C++语言的类型
C++类型完全包括了C的类型,C++新增了两个类型:
1)布尔类型:类型名bool,包括的数据ture和false,表达逻辑操作的结果。bool类型还可以作为函数的返回类型,表示条件测试的结果。true可以对应整数1,false对应整数0。不为0的整型数据对应true; 等于0的整型数据对应false。
2)抽象数据类型:类类型。
C++语言的类型有:
基本类型:bool,char,int,double等。
特殊类型:void。
用户定义类型:enum,数组,结构,联合
指针类型:type *。
抽象数据类型:类类型。
在C中,每个函数都有返回型。如果一个函数返回型缺省,那么,该函数的返回类型为整型。在C++中某些函数是不能有返回类型的,所以,C++语言中,只有在没有返回类型的函数前面,才没有类型。
2.11、类型转换
类型转换是一种类型的值转换为另一种类型的值。
1.隐式转换
隐式转换发生在下述情况:
1)混合运算:级别低的类型向级别高的类型转换。
2)将表达式的值赋给变量:表达式的值向变量类型的值转换。
3)实参向形参传值:实参的值向形参的值进行转换。
4)函数返回结果:返回的值向函数返回类型的值进行转换。
2.显示类型转换
显示类型转换:C语言的方式为:
(类型名)表达式 或者 (类型名) (表达式)
C++语言中,还提供了函数表示法:类型名(表达式)
注意:类型转换需要申请一个临时单元,将要转换的值先复制到临时单元,转换发生在临时单元中。例:
float fnum=5.8;
int inum=int (fnum);
int (fnum)是一个表达式,结果为5;但fnum的值没有改变,仍是5.8。
对于复合类型(对类型有两个或两个以上限制的类型,如所有的指针类型)不能用函数表示法进行类型的转换,只能用C语言的强制转换表示法。例如:
int num;
int * pnum=#
char * pc;
pc=(char *) pnum;
那么pc和pnum;指向的是同一个单元;从pnum的角度看,指向的是两个字节的一个整数,而从pc的角度看,指向的是字符数组。
2.12 函数体内定义变量的位置
C语言变量的定义只能放在函数的开头,即在第一条可执行语句之前,C++则允许在任意的位置定义变量。
void main()
{ int a[12];
for(int i=0;i<12;i++)
a[i]=i;
for(int j=0;j<12;j++)
cout<<a[j]<<endl;
}
2.13 局部变量和全局变量同时,仍然可以访问全局变量
int a=2;
main()
{
int a=123;
printf(“%d %d\n”, a,::a);
}