结构体¶
结构体类型是用户定义的复合类型,它由可以具有不同类型的字段或成员组成。在C++
中,一个结构体和一个类相同,只是它的成员在默认情况下是公共的
关键字struct
用于定义结构体类型和(或)结构体类型的变量,基本语法如下:
[template-spec] struct [tag [: base-list ]]
{
member-list
} [declarators];
[struct] tag declarators;
参数解析¶
template-spec
:模板规范(可选)struct
:关键字tag
:结构体名。在结构体范围内该tag
变成保留字。如果被忽略,则定义为匿名结构体base-list
:继承的类或结构体列表member-list
:结构体成员列表declarators
:声明符列表,声明了一个或多个该结构体类型的实例。如果结构体的所有数据成员都是公共的,则声明符可以包括初始值列表。初始值列表在结构体中很常见,因为默认情况下数据成员是公共的
示例¶
struct PERSON { // Declare PERSON struct type
PERSON() {}
PERSON(int age, long ss, float weight, char *name) : age(age), ss(ss), weight(weight) {
memcpy(this->name, name, strlen(name) * sizeof(char));
}
int age; // Declare member types
long ss;
float weight;
char name[25];
} family_member(1, 2, 3, "asdfa"); // Define object of type PERSON
struct CELL { // Declare CELL bit field
unsigned short character : 8; // 00000000 ????????
unsigned short foreground : 3; // 00000??? 00000000
unsigned short intensity : 1; // 0000?000 00000000
unsigned short background : 3; // 0???0000 00000000
unsigned short blink : 1; // ?0000000 00000000
} screen[25][80]; // Array of bit fields
int main() {
struct PERSON sister; // C style structure declaration
PERSON brother; // C++ style structure declaration
sister.age = 13; // assign values to members
brother.age = 7;
cout << "sister.age = " << sister.age << '\n';
cout << "brother.age = " << brother.age << '\n';
CELL my_cell;
my_cell.character = 1;
cout << "my_cell.character = " << my_cell.character;
cout << family_member.age << " " << family_member.ss << " " << family_member.weight << " " << family_member.name
<< endl;
}
C
风格的结构体变量声明必须显式使用关键字struct
,而C++
风格的结构体变量声明不需要