结构体

结构体类型是用户定义的复合类型,它由可以具有不同类型的字段或成员组成。在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++风格的结构体变量声明不需要