复杂的数据类型04--对象的基础:结构
(1)概念:结构是一种由程序员定义的、由其他变量类型组合而成的数据类型。
(2)结构的节本语法格式:
struct name
{
type varName1;
type varName2;
......
}; //注意有一个分号
注意:结构所能包含的变量个数是无限制的,变量可以是任意一种合法的数据类型,这些变量称为该结构的成员 。
(3)使用场景:需要处理一些具有多种属性的数据时,结构往往是最好的选择。
比如:编写个人档案,涉及到的基本特征有姓名、性别、年龄...等。
//定义一个Person类型的结构
struct Person
{
std::string name;
char sex; //F==Female,M==Male
int age;
};
(4)创建结构类型的变量
定义结构后,可以创建该结构类型的变量
Person Xiaohong; //创建一个Person结构类型Xianghong
(5)用“.”对结构成员进行赋值
Xiaohong.name="小红";
Xiaohong.sex='M';
Xiaohong.age=18;
如果在创建一个结构类型变量的时候已经知道它各个成员相关的值,我们可以在声明变量的同时进行赋值。
Person Xiaohong={"小红",'M',18};
(6)结构与指针
1)指针可以指向结构,就像指向其他任何变量那样。
2)如何通过指针访问各个成员的值?
<1>创建一个指向该结构的指针:
Person *pXiaohong=&Xiaoghong; //创建Person类型的指针
注意:因为指针的类型必须与指向的地址的变量的类型一致,所以之pXiaohong指针的类型也是Person(Xiohong的类型是Person,所以pXiaohong指针的类型也是Person).
<2>通过对指针解引用来访问相应的变量值:
//修改Person类型结构的成员值 方式一:
(*pXiaohong).name="小a红";
(*pXiaohong).sex='F';
(*pXiaohong).age=20;
std::cout<< (*pXiaohong).name<<"\n"; //小a红
std::cout<< (*pXiaohong).sex<<"\n"; //F
std::cout<< (*pXiaohong).age<<"\n"; //20
<3>通过"->"方式访问相应的变量值:
//修改Person类型结构的成员值 方式二:
pXiaohong->name="小明";
pXiaohong->sex='F';
pXiaohong->age=23;
std::cout<<pXiaohong->name<<'\n'; //小明
std::cout<<pXiaohong->sex<<'\n'; //F
std::cout<<pXiaohong->age<<'\n'; //23
(7)完整代码
#include <iostream>
int main()
{
//定义一个Person类型的结构
struct Person
{
std::string name;
char sex; //F==Female,M==Male
int age;
};
Person Xiaohong; //创建一个Person结构类型Xianghong
Xiaohong.name="小红";
Xiaohong.sex='M';
Xiaohong.age=18;
Person *pXiaohong=&Xiaohong; //创建Person类型的指针
//修改Person类型结构的成员值 方式一:
// (*pXiaohong).name="小a红";
// (*pXiaohong).sex='F';
// (*pXiaohong).age=20;
//
// std::cout<< (*pXiaohong).name<<"\n"; //小a红
// std::cout<< (*pXiaohong).sex<<"\n"; //F
// std::cout<< (*pXiaohong).age<<"\n"; //20
//修改Person类型结构的成员值 方式二:
pXiaohong->name="小明";
pXiaohong->sex='F';
pXiaohong->age=23;
std::cout<<pXiaohong->name<<'\n'; //小明
std::cout<<pXiaohong->sex<<'\n'; //F
std::cout<<pXiaohong->age<<'\n'; //23
return 0;
}
(8)课后练习
• 【要求】
– 定义一个结构,至少存储:姓名、身份证、性别
– 实现文件存储
– 可以打印到屏幕
未完待续。。。