假设我们要存储有关篮球运动员的信息,则可能存储Ta的姓名、工资、身高、体重、平均得分等,希望有一种数据格式可以将这些信息存放在一个单元中。
因此引入了结构的概念
结构是用户定义的类型
结构中所有元素的类型可以不相同
创建结构包括两步:
1.定义结构描述——它描述并标记了能够存储在结构中的各种数据类型
2.按描述创建结构变量(结构数据对象)
结构体成员默认为 public
它的本质是创建了一个名为information的新的数据类型
struct information
{
char name[20];
float salary;
double height;
};
information zhangsan; //C++允许在声明结构变量时省略关键字
struct information lisi;
//或者同时在定义结构后面声明
struct information
{
char name[20];
float salary;
double height;
}wangmazi;
其中zhangsan,lisi,wangmazi都是information结构体的实例,可以被分配和拥有自己的内存,以保存其成员数据。
尽管3个结构体变量具有不同的名称,但每个变量都包含具有相同名称的成员。
有两种方式初始结构体变量:使用初始化列表或构造函数
初始化结构体变量成员的最简单的方法是使用初始化列表。初始化列表是用于初始化一组内存位置的值列表。列表中的项目用逗号分隔并用大括号括起来。
定义和初始化information变量的方式是:先指定变量名,后接赋值运算符和初始化列表:
information LiHua = {"LiHua",5000,191};
也可以仅初始化结构体变量的部分成员:
information LiHua = {"LiHua",5000};
这里只有name和salary成员被初始化,height成员未初始化。但是,如果某个结构成员未被初始化,则所有跟在它后面的成员都需要保留为未初始化。使用初始化列表时,C++不提供跳过成员的方法。
还有一点很重要,不能在结构体声明中初始化结构体成员,因为结构体声明只是创建一个新的数据类型,还不存在这种类型的变量。
以下是一个名为 Employee 的结构体的声明语句,它包含一个具有两参数的构造函数,以便在创建一个 Employee 变量而不向其传递任何参数时,提供默认值:
struct Employee
{
string name; // 员工姓名
int vacationDays, // 允许的年假
daysUsed; //已使用的年假天数
Employee (string n ="",int d = 0) // 构造函数
{
name = n;
vacationDays = 10;
daysUsed = d;
}
};
结构体成员的访问方式与类的公共成员一样,都是使用点运算符。但是,类的数据成员通常是私有的,必须通过函数访问。因为结构数据成员是公共的,所以它们可以被直接访问,并且可以像常规变量一样使用。
zhangsan.name="张三";
zhangsan.salary=4000;
cout<<zhangsan.name<<endl;
定义:该数组的每个元素都是一个结构体。
//以下语句定义了一个名为infoList的数组,它有20个元素,每个元素都是一个information结构体
information infoList[20];
//下面的表达式引用了infoList[5]的salary成员
infoList[5].salary;
在算法竞赛中结构体的使用非常普遍,务必掌握
原文:https://www.cnblogs.com/jiyi-conding/p/11342144.html