☰分类导航

C++编程/结构体和类
课程进度 51% · 第10/18章第10/18章 · 标签 1/4
— 1 —

结构体定义与使用

结构体是 C++ 中的一种用户自定义数据类型,用于将不同类型的数据组合在一起。


```cpp
// 结构体定义
struct Student {
    string name;
    int age;
    double gpa;
};

// 创建结构体变量
Student student1;
student1.name = "张三";
student1.age = 20;
student1.gpa = 3.8;

// 创建并初始化
Student student2 = {"李四", 22, 3.9};

// 结构体数组
Student class_roster[30];

// 结构体指针
Student* ptr = &student1;
cout << ptr->name;    // 箭头操作符
cout << (*ptr).age;   // 等价于 ptr->age
```
cpp
1
// 结构体定义
2
struct Student {
3
string name;
4
int age;
5
double gpa;
6
};
7
 
8
// 创建结构体变量
9
Student student1;
10
student1.name = "张三";
11
student1.age = 20;
12
student1.gpa = 3.8;
13
 
14
// 创建并初始化
15
Student student2 = {"李四", 22, 3.9};
16
 
17
// 结构体数组
18
Student class_roster[30];
19
 
20
// 结构体指针
21
Student* ptr = &student1;
22
cout << ptr->name; // 箭头操作符
23
cout << (*ptr).age; // 等价于 ptr->age

📖结构体成员默认是公开的(public),可以包含函数(方法)

— 2 —

结构体中的函数


```cpp
struct Rectangle {
    double width;
    double height;

    // 结构体中的函数
    double area() {
        return width * height;
    }
    double perimeter() {
        return 2 * (width + height);
    }
};

// 结构体作为函数参数
void printStudent(Student s) {
    cout << "姓名: " << s.name << endl;
    cout << "年龄: " << s.age << endl;
}

// 使用引用避免复制
void updateGPA(Student& s, double newGPA) {
    s.gpa = newGPA;
}

// 结构体嵌套
struct Point { double x, y; };
struct Line {
    Point start, end;
    double length() {
        return sqrt(pow(end.x-start.x,2) +
                    pow(end.y-start.y,2));
    }
};
```
cpp
1
struct Rectangle {
2
double width;
3
double height;
4
 
5
// 结构体中的函数
6
double area() {
7
return width * height;
8
}
9
double perimeter() {
10
return 2 * (width + height);
11
}
12
};
13
 
14
// 结构体作为函数参数
15
void printStudent(Student s) {
16
cout << "姓名: " << s.name << endl;
17
cout << "年龄: " << s.age << endl;
18
}
19
 
20
// 使用引用避免复制
21
void updateGPA(Student& s, double newGPA) {
22
s.gpa = newGPA;
23
}
24
 
25
// 结构体嵌套
26
struct Point { double x, y; };
27
struct Line {
28
Point start, end;
29
double length() {
30
return sqrt(pow(end.x-start.x,2) +
31
pow(end.y-start.y,2));
32
}
33
};