任何用结构做到的事情,都可以用类做到。
数据结构struct
定义结构
[template-spec] struct [ms-decl-spec] [tag [: base-list ]]
{
member-list
} [declarators];
[struct] tag declarators;
template-spec | 可选模板规范。 见?模板规范。 | struct | struct 关键字。 | ms-decl-spec | 可选存储类规范。见?__declspec?关键字。 | tag | 为结构提供的类型名称。 标记将变成结构范围内的保留字。 标记是可选项。 如果省略,则定义匿名结构。 有关详细信息,请参阅?匿名类类型。 | base-list | ?此结构将从中派生其成员的类或结构的可选列表。 有关详细信息?,请参阅基类?。 每个基类或结构名称都可以在访问说明符前面 (公共、?专用、?受保护的) 和?虚拟?关键字。 有关详细信息,请参阅?控制对类成员的访问?中的成员访问表。 | member-list | 结构成员列表。 有关详细信息,请参阅?类成员概述?。 此处的唯一区别是?struct ?使用代替?class 。 | declarators | ?指定结构名称的声明符列表。 声明符列表声明了一个或多个结构类型实例。 如果结构的所有数据成员为?public ,则声明符可能包含初始值设定项列表。 初始值设定项列表在结构中很常见,因为数据成员默认是?public ?。 有关详细信息?,请参阅声明器概述?。 |
struct PERSON // 声明 PERSON 结构类型
{
int age; // 声明成员类型
long ss;
float weight;
char name[25];
} family_member; //定义 PERSON 类型的对象
int main()
{
struct PERSON sister; // C风格结构声明
PERSON brother; // C++风格结构声明
sister.age = 13; // 为成员赋值
}
初始化结构
- 将数据存入结构成员的方法,是在声明语句中为结构成员定义初始值。初始值在初始化列表内,逗号分开,与数组成员定义初始值的方式相同。
{}内的变量要注意顺序。
struct PERSON // 声明 PERSON 结构类型
{
int age; // 声明成员类型
float weight;
char name[25];
} family_member; //定义 PERSON 类型的对象
int main()
{
PERSON brother{ 18,50.0 ,"jeff" }; // C++风格结构声明
}
访问结构的成员
int main()
{
PERSON brother{ 50.0,18 ,"jeff" }; // C++风格结构声明
std::cout << brother.age;
}
RECT结构
windows.h的windef.h头文件中有一个预定义的RECT结构。
typedef struct tagRECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, *NPRECT, *LPRECT;
MFC中也定义了CRect类。
使用指针处理结构
struct PERSON // 声明 PERSON 结构类型
{
int age; // 声明成员类型
float weight;
char name[25];
} family_member; //定义 PERSON 类型的对象
int main()
{
PERSON brother{ 50.0,18 ,"jeff" }; // C++风格结构声明
PERSON* ptrPerson{};
ptrPerson = &brother;
std::cout << (*ptrPerson).age<<std::endl;
std::cout << ptrPerson->age;
}
struct ListElement
{
RECT aRect;
ListElement* pNext;
};
?通过指针访问结构成员
括号用来解除对指针的引用,成员访问操作符.的优先级高级解除引用操作符*。
(*pNext).top += 10;
间接成员选择操作符(间接成员访问操作符)
间接成员选择操作符->专用于通过指针访问结构(或类)的成员。
pNext->top+=10;
|