什么是结构?哪些情况下需要使用结构?结构的语法要点?
结构的定义
在C++中, 结构 (structure)与类几乎是完全一样的类型,( 结构是一种数据类型 )差别仅仅在于缺省情况下结构的成员为公有的。在C语言阶段,结构就已存在,但它只有公有的数据成员。正因为如此,C++程序员仍然使用结构,但是只为结构安排公有的数据成员。当只使用数据成员,而且这些数据成员的类型往往互不相同时,总是采用结构类型,而不采用类。因为这样程序更易读易懂。
定义结构类型的格式如下:
struct //结构类型名
{
int a;
char b;
};//最后的分号不可少
例如,下面给出的库存货物(inventory、员工(employee)两个结构类型:
struct inventory
{
char description[15] ; //货物名称
char no[10] ; //货号
int quantity ; //库存数量
double cost ; //成本
double retail ; //零售价格
} ;
struct employee
{
char name[27] ; //员工姓名
char address[30] ; //家庭住址
long zip ; //邮政编码
long telenum ; //联络电话
double salary ; //工资
};
结构的使用——通过结构型变量
◆ 1、 结构是一种派生数据类型,定义结构时并不分配存储空间,只有定义了结构类型的变量,编译系统才为结构变量分配存储空间 。定义变量方法如下:设有两个雇员———man1和man2,如此定义: employee man1 , man2 ;
◆ 2、对结构变量可以在定义时初始化。方法是:
在花括号中顺序填入结构中的(数据)成员的初始值:
employee emp1={“朱明”,“四牌楼2号”,210096,83792666,2430.0},
emp2={“沈俊”,“丁家桥15号”,210009,83273389,1920.0};
◆ 3、
结构变量的访问与类的对象一样,可使用成员访问操作符之一的“点操作符”
,对成员一个个进行:
变量名 . 成员名
◆ 4、与同类的对象之间可以拷贝一样,同结构类型的变量之间也可以作为整体相互赋值(拷贝)(因为结构的组成与大小是固定的,这一点与数组不同)。
在C++中,赋值运算符“=”理解为隐式拷贝赋值操作符(Copy Assignment Operator)。如按前面的定义,emp1=emp2是合法的,这时emp2中的内容成为emp1的拷贝。但同类型变量不能比较大小。
◆ 5、结构变量也可以作为函数的参数和返回值,结构作为参数也是按值(复制)进行传递的,当然也可以按引用传递。
在程序文件中强烈推荐将结构类型的定义放在所有函数的外面,这样程序文件中的各个函数可以按需要在各个函数中声明局部的结构变量。因为,在各函数中定义结构类型,即使两个函数中定义的完全一样,系统也完全认为是两种结构类型。
◆ 6、结构可以嵌套,如上面所定义的员工(employee)结构类型可改为如下定义:
struct mail
{
char address[30] ; //地址
long int zip ; //邮政编码
long int telenum ; //电话号码
};
struct employee
{
char name[25] ; //员工姓名
mail addinfo ; //结构变量作为成员,嵌套
double salary ; //工资
};
结构成员必须是已定义过的结构,结构成员决不能是结构自身(这会引起无穷递归)。
访问结构变量的结构成员的方法:用连续点号来访问结构变量的结构成员。例如有程序段:
employee emp1={“朱明”,“四牌楼2号”,210096,83792666,2430.0};
cout<<emp1.addinfo.telenum<<endl;
输出为:
83792666。