复杂的数据类型5
让编程改变世界
Change the world by program
对象的基础 —— 结构
C语言和C++有许多共同的优美之处。其中之一便是程序员不必受限于这两种语言自带的数据类型的束缚。 C和C++的程序员完全可以根据具体情况定义一些新的数据类型并创建新类型的变量。 事实上,这个概念一直贯穿于C++的核心:对象 但首先,我们讲一个比较简单的例子:结构结构(Structure)是一种由程序员定义的、由其他变量类型组合而成的数据类型。
定义一个结构的基本语法是: struct name {type varName1;
type varName2;
。。。。。。
}; // 请注意,别忘记这个小不点^_^结构的应用
当需要处理一些具有多种属性的数据时,结构往往是很好的选择。 例如当我们在编写一个鱼油档案管理程序时,涉及到的基本特征有:姓名、身份证、性别。。。 struct FishOil {std::string name;
std::string uid;
char sex; // F==Female, M==Male
} 注意:C++对于一个结构所能包含的变量的个数是没有限制的,那些变量通常我们成为该结构的成员,他们可以是任意一种合法的数据类型。 回到刚才的例题,在定义了一个结构之后,就可以使用如下所示的语法来创建该类型的变量了:FishOil Jiayu; // 创建一个FileOil结构类型Jiayu
Jiayu.name = “小甲鱼”;
Jiayu.uid = “fishc_00000”;
Jiayu.sex = ‘M’;
回顾一下刚才的做法:
定义结构 用”.”对结构成员进行赋值 如果我们在创建一个结构类型变量的时候就已经知道它各个成员相关的值,我们可以在声明新变量的同时进行赋值。 FishOil Jiayu = { “小甲鱼”, “fishc_00000”, ‘M’ }结构与指针
在C、C++里,指针无所不能,也可以指向结构,就像指向其他任何变量那样。 但我们有一个问题是:怎样才能通过指针解引用该指向结构的各个成员?(或者说是通过指针访问各个成员的值) 我们从地球的起源说起。。。。。。定义一个结构:
struct FishOil {std::string name;
std::string id;
char sex; // F==Female, M==Male
} 创建一个FishOil类型的变量:FishOil Jiayu = { “小甲鱼”, “fishc_00000”, ‘M’ }
创建一个指向该结构的指针:FishOil *pJiayu = &Jiayu;
注意:因为指针的类型必须与指向的地址的变量的类型一致,所以pJiayu指针的类型也是FishOil我们可以通过对指针进行解引用来访问相应的变量值
(*pJiayu).name = “黑夜”;
(*pJiayu).id = “fishc_00001”;
如果你觉得刚刚的方法不够地道不够味儿,可以换用第二种方法:
i.e. …… ……pJiayu -> name = “黑夜”;
pJiayu -> id = “fishc_00001”;
pJiayu -> sex = F;
std::cout << pJiayu -> name;
std::cout << pJiayu -> id;
std::cout << pJiayu -> sex;