C++中的结构体
在 C++ 中,结构体(struct)是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起,形成一个新的复合数据类型。以下是关于 C++ 结构体的详细介绍:
定义与基本用法
- 定义结构体:使用
struct
关键字来定义结构体。例如,要定义一个表示学生信息的结构体,可以这样写:
struct Student {
std::string name;
int age;
double score;
};
这里Student
是结构体的名称,它包含了name
(字符串类型)、age
(整型)和score
(双精度浮点型)三个成员变量。
- 创建结构体变量:定义好结构体后,就可以创建该结构体类型的变量。例如:
int main() {
Student stu1;
stu1.name = "Alice";
stu1.age = 20;
stu1.score = 90.5;
return 0;
}
这里创建了一个Student
类型的变量stu1
,并为其成员变量赋值。
结构体的特点
- 数据封装:结构体将相关的数据成员封装在一个单元中,使代码更易于理解和管理。比如在表示学生信息的结构体中,将姓名、年龄、成绩等信息组合在一起,清晰地表示了一个学生的完整信息。
- 成员访问:通过结构体变量名和成员访问运算符
.
来访问结构体的成员。如上面示例中stu1.name
就是访问stu1
变量的name
成员。 - 可作为函数参数和返回值:结构体可以像其他基本数据类型一样,作为函数的参数传递和返回值。这样可以方便地在函数之间传递一组相关的数据。例如:
void printStudentInfo(Student stu) {
std::cout << "Name: " << stu.name << ", Age: " << stu.age << ", Score: " << stu.score << std::endl;
}
int main() {
Student stu1 = {"Bob", 21, 85.0};
printStudentInfo(stu1);
return 0;
}
这里printStudentInfo
函数接受一个Student
类型的结构体变量作为参数,并输出学生的信息。
结构体与类的区别
- 默认访问权限:在结构体中,成员的默认访问权限是
public
(公共的),而在类中,成员的默认访问权限是private
(私有的)。 - 设计目的:虽然结构体和类都可以用于封装数据和行为,但类更侧重于面向对象编程中的数据抽象和封装,通常会包含成员函数来操作数据成员。结构体更多地用于简单的数据聚合,当不需要复杂的行为和封装时,使用结构体更合适。
结构体的应用场景
- 数据存储和管理:在处理大量相关数据时,结构体可以将这些数据组织在一起,方便进行存储和操作。比如在数据库管理系统中,可能会使用结构体来表示数据库中的一条记录。
- 函数参数传递:当需要向函数传递多个相关参数时,使用结构体可以使参数传递更清晰、简洁。避免了传递多个单独的参数可能带来的混淆。
- 自定义数据类型:通过结构体可以创建自定义的数据类型,以满足特定的编程需求。例如在图形处理中,可以定义一个结构体来表示二维平面上的点或矩形等几何形状。
拓展内容:
结构体嵌套
结构体中可以包含其他结构体作为成员,这就是结构体的嵌套。例如:
struct Address {
std::string street;
std::string city;
std::string zipCode;
};
struct Employee {
std::string name;
int age;
Address address; // 嵌套Address结构体
};
int main() {
Employee emp;
emp.name = "Charlie";
emp.age = 25;
emp.address.street = "123 Main St";
emp.address.city = "Anytown";
emp.address.zipCode = "12345";
return 0;
}
结构体数组
可以定义结构体类型的数组,用于存储多个相同结构体类型的数据。例如:
struct Book {
std::string title;
std::string author;
int year;
};
int main() {
Book library[3]; // 定义包含3个Book结构体的数组
library[0].title = "C++ Primer";
library[0].author = "Stan Lippman";
library[0].year = 2012;
// 可以继续为其他元素赋值
return 0;
}
结构体指针
可以定义指向结构体的指针,通过指针来访问结构体的成员。使用->
运算符来通过指针访问结构体成员。例如:
struct Point {
int x;
int y;
};
int main() {
Point p = {3, 5};
Point* ptr = &p;
std::cout << "x value: " << ptr->x << std::endl;
std::cout << "y value: " << ptr->y << std::endl;
return 0;
}
结构体中的成员函数
在 C++ 中,结构体也可以包含成员函数,这一点与类非常相似。例如:
struct Circle {
double radius;
// 成员函数,计算圆的面积
double area() {
return 3.14159 * radius * radius;
}
};
int main() {
Circle c;
c.radius = 5.0;
std::cout << "Circle area: " << c.area() << std::endl;
return 0;
}
匿名结构体
可以定义没有名称的结构体,称为匿名结构体。例如:
int main() {
struct {
int a;
double b;
} anonStruct;
anonStruct.a = 10;
anonStruct.b = 3.14;
return 0;
}
结构体的继承
C++ 中的结构体也支持继承,不过使用相对较少。例如:
struct Base {
int baseValue;
};
struct Derived : public Base {
int derivedValue;
};
int main() {
Derived d;
d.baseValue = 10;
d.derivedValue = 20;
return 0;
}
标签:std,stu1,struct,int,成员,C++,结构
From: https://blog.csdn.net/m0_60046831/article/details/145304558