1.自定义数据类型C++中的结构:结构是使用关键字struct定义的用户定义类型。结构起源于C语言,C++继承并扩展了结构。C++中的结构在功能上可以由类代替,因为任何使用结构能够做到的事情都可以使用类做到。但是因为Windows是在广泛应用C++之前用C语言编写的,所以结构遍布在Windows编程的各个方面。今天,结构仍然被广泛使用,因此我们确实需要 了解结构。2.结构的概念考虑一下要描述像一本书这样简单的事物需要多少信息。我们首先可能想到书名,作者,出版社,出版日期,页数,定价,主题或分类以及ISBN号,还可能不太困难地就想到一些其他信息。我们可以指定相互独立的变量来容纳描述一本书所需的每项信息,但更希望能够使用一种数据类型来包含所有这些信息。这正是结构能为我们做的事情。3.定义结构假设只需要在书的定义中包括书名,作者,出版社和出版年份。struct Book{chartitle[80];charauthor[80];charpublisher[80];intyear;};这里的代码没有定义任何变量,但实际上创建了一种新的类型,该类型的名称是BOOK。关键字struct将BOOK定义成结构,构成本类型对象的元素是大括号内定义的。结构体内的元素可以是除所定义的结构类型以外的任何类型。例如,BOOK的结构定义中不能包括类型为BOOK的元素。我们可以认为这是一种局限性,但BOOK定义中可以包括BOOK类型变量的指针。创建其他类型变量的方式来创建BOOK类型的变量:BOOK novbel; //声明一个BOOK类型的变量novbel.4.初始化结构第一种将数据存入结构成员的方法,是在声明语句中为结构体成员定义初始化。Book novel{“Paneless Programing”,“I.c. Fingers”,“Gutter Press”,1981};这些初始化值位于初始化列表内,相互之间以逗号分开,这种方式与为数组成员定义初始值的方式完全相同。5.访问结构的成员为了访问结构各个成员,可以使用成员选择操作符”.”,有时称之为成员访问操作符。如果想修改Novel结构的Year成员可以这样写:novel.year=1988;6.RECT结构在windows程序中,矩形用的很多。因此,包含在windows.h的windef.h头文件中有一个预定义的RECT结构,,其定义本质struct RECT{LONG left;LONG top;LONG right;LONG bottom;};MFC(微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。) MFC也定义了等价于RECT结构的CCRect类。当我们理解类之后,将优先使用CRect大类而非RECT结构。CRect类提供了很多处理矩形的函数,在使用MFC编写Windows程序时将大量使用这些函数。7.使用指针处理结构可以创建指向结构类型对象的指针。windows.h中声明的许多处理RECT对象的函数都要求实参是指向RECT的指针,因为这样可以避免给函数传递RECT实参时复制整个结构的系统开销。RECT* pRect{}; //声明一个指针指向RECT假设已经定义了一个RECT对象&aRect,那么可以使用通常的方式将aRect变量的地址赋予pRect指针:pRect = &aRect;struct不能包含与被定义结构类型相同的成员,但可以包含指向struct的指针,其中包括指向相同类型struct的指针。struct ListElement{RECT aRect;ListElement* pNext;}8.通过指针访问结构成员RECT aRect{0,0,100,100};RECT* pRect{&aRect};第一条语句声明并定义了一个RECT类型的对象aRect,将第一对成员初始化为{0,0},将第二对成员初始化为{100,100}。第二条语句将pRect声明为指向RECT类型的指针,并将其初始化为aRect的地址。现在,可以用下面的语句,通过指针访问aRect的成员:(*pRect).top+=10;这里使用的通过指针访问struct成员的方法看起来相当笨拙。这种操作在C++中出现得相当频繁,因此C++提供了一个特殊操作符,间接成员选择操作符(->)。pRect->top +=10;该语句更清楚地表示自己的用途。在本书中经常会看到该操作符。9.数据类型,对象,类和实例基本类型的变量不能充分模拟现实世界中的对象或虚拟的对象。例如,很难用int模拟一个箱子,但可以使用struct成员为这样的对象定义一组特性。如下所示,可以定义length,width和height这3个变量来表示箱子的尺寸,并将它们作为Box结构的成员捆绑到一起:struct Box{doublelength;doublewidth;doubleheight;};有了名为Box的新数据类型的定义之后,就可以像定义基本类型变量那样定义该类型的变量。在程序中,可以创建,处理和销毁任意数量的Box对象。这意味着可以使用struct来模拟对象,并 围绕对象编写程序。因此,这就是面向对象编程,对吗?对,但不完全对。面向对象编程(OOP)基于与对象类型相关的3个基本概念,即封装,多态性和继承性,而我们目前所看到的不完全与之吻合。在C++中,struct的概念远远超出了C语言中原来的struct概念,它现在合并了类的面向对象思想。类的思想–可以创建数据类型并像使用已有类型那样使用,对C++而言非常重要,因此该语言引入了一个新关键字class来描述类这一概念。在C++中,除了成员的访问控制以外,关键字struct和class几乎是等同的。保留关键字struct是为了向后兼容C语言,但使用struct能实现的一切都可以用类来实现,而且类可以比struct实现更多的功能。