零基础学C++之进阶篇一
零基础学C++之进阶篇一
结构体与共用体
结构体可以将不同类型组合在一起形成一个新的类型,这个类型是对数据的整合,使代码更加简洁;共用体和结构体很相近,它像一个存储空间可变的数据类型,使程序设计更加灵活;枚举则是特殊的常量,增加代码的可读性;自定义类型能够增加代码的复用性。
结构体
结构体定义
结构体定义如下:
struct 结构体类型名
{
成员类型 成员名;
.......;
成员类型 成员名;
};
struct就是定义结构体的关键字,结构体类型名是一种标识符,该标识符代表一个新的变量类型。结构体使用大括号将成员括起来,每个成员都有自己的类型,成员类型可以是常规的基础类型,也可以是自定义类型,还可以是一个类型。
结构体变量
结构体是一个构造类型,前面只是定义了结构体,形成一个新的数据类型,还需要使用该数据类型来定义变量。结构体变量有两种声明形式。
第一种声明形式是在定义结构体后,使用结构体类型声明变量。如:
struct PersonInfo
{
int index;
char name[30];
short age;
};
PersonInfo pInfo;
另一种是定义结构体时直接声明,如:
struct PersonInfo
{
int index;
char name[];
short age;
}pInfo1,pInfo2;
结构体成员及初始化
引用结构体成员有两种方法,一种是声明结构体变量后,通过成员运算符“.”引用;一种是声明结构体指针变量,使用指向“->”运算符引用。
(1)使用成员运算符“.”引用结构体成员,一般形式如下:
结构体变量名.成员名
引用到结构体成员后,既可以分别对结构体成员进行赋值,对于每个结构体成员就和使用普通变量一样。结构体可以在定义时直接对结构体变量赋值。
(2)在定义结构体时,可以同时声明结构体指针变量,如
struct PersonInfo
{
int index;
char name[30];
short age;
}*pPersonInfo;
如果要引用指针结构体变量的成员,需要使用指向运算符“->”,一般形式如下:
结构体指针变量->成员名;
结构体的嵌套
定义完结构体后就形成一个新的数据类型,C++语言在定义结构体时可以声明其他已定义好的结构体,也可以在定义结构体时定义子结构体。
(1)在定义时声明其他已经定义好的结构体变量,如:
struct struct1
{
int a;
double b;
char c[20];
};
struct struct2
{
char a[15];
struct1 s_struct1;
};
(2)在结构体中定义子结构体,如:
struct struct1
{
int a;
double b;
char c[20];
struct struct2
{
char d[15];
int e;
};
};
重命名数据类型
C++允许使用关键字typedef给一个数据类型定义一个别名,如
typedef int flag;
flag a;
类或者结构体在声明时使用typedef:
typedef class c
{
成员列表;
}myclass,classA;
这样声明的类就拥有了myclass、classA两个别名。
typedef主要的用途有:
- 很复杂的基本类型名称,例如函数指针int (*)(int i);
- 使用其他人开发的类型时,使它的类型名符合自己的代码习惯。
共用体
共用体数据类型是指将不同的数据项组织为一个整体,它和结构体有些类似,但共用体在内存中占用首地址相同的一段存储单元,因为共用体的关键字为union。
共用体的定义与声明
定义共用体类型的一般形式为:
union 共用体类型名
{
成员类型 共用体成员名1;
成员类型 共用体成员名2;
……
成员类型 共用体成员名n;
};
共用体的特点
共用体数据类型有以下几个特点:
(1)使用共用体变量的目的是希望用同一个内存段存放几种不同类型的数据。
(2)能够被访问的是共用体变量中最后一次呗赋值的成员,在对一个新的成员赋值后原有的成员就失去了作用。
(3)共用体变量的地址和它的各个成员的地址都是同一地址。
(4)不能对共用体变量名赋值;不能企图引用变量名来得到一个值;不能在定义共用体变量时对它初始化;不能用共用体变量名做函数参数。
枚举类型
在C++语言中,枚举类型是一些标识符的集合,从形式上看枚举类型就是用大括号将不同标识符名称放在一起。用枚举类型声明变量,其变量的值只能取自括号内的这些标识符。
枚举类型的声明
枚举类型定义有两种形式:
(1)枚举类型的一般形式:
enum 枚举类型名{标识符列表};
(2)带赋值的枚举类型声明形式:
enum 枚举类型名
{
标识符[=整型常数];
标识符[=整型常数];
……
标识符[=整型常数];
}
枚举类型变量
在声明了枚举类型之后,可以用它来定义变量,例如:
enum weekday{Sunday,Monday,Tuesday,Wednesday,Tursday,Friday,Saturday};
[enum] weekday myworkday;
(1)枚举变量的值只能是Sunday到Saturday之一;
(2)一个整数不能直接赋值给一个枚举变量,但可以通过强制类型转换,将整数转换为合适的枚举类型数组。
枚举类型的运算
枚举值相当于整型变量可以用枚举值进行一些运算,枚举值可以和整型变量一起比较,枚举值和枚举值之间也可以比较。
实例01 枚举类型的比较
#include <iostream>
using namespace std;
enum weekday{Sunday,Monday,Tuesday,Wednesday,Tursday,Friday,Saturday};
void main()
{
weekday day1,day2;
day1=Monday;
day2=Saturday;
int n;
n=day1;
n=day2+1;
if(n>day1)
cout << "n>day1" << endl;
if(day1<day2)
cout << "day1<day2" << endl;
}