结构体 函数
时间: 2025-05-18 16:05:19 浏览: 8
### 结构体与函数的结合使用
#### 定义结构体并包含成员函数
在 C++ 中,结构体不仅可以包含数据成员,还可以包含成员函数。这使得结构体能够像类一样实现封装的功能[^1]。
以下是定义一个带有成员函数的结构体的例子:
```cpp
#include <iostream>
using namespace std;
struct Student {
string name;
int score;
void display() const { // 成员函数用于显示学生的信息
cout << "Student Name: " << name << ", Score: " << score << endl;
}
void setInfo(const string& newName, int newScore) { // 设置学生的姓名和分数
name = newName;
score = newScore;
}
};
```
在这个例子中,`display()` 是一个常量成员函数,它不会修改对象的状态;而 `setInfo()` 则是一个普通的成员函数,用来设置对象的数据成员。
---
#### 使用指针访问结构体成员
当需要通过指针对结构体成员进行操作时,可以通过解引用的方式访问其成员[^3]。下面展示了一个简单的示例:
```cpp
void modifyStudent(Student* studentPtr) {
(*studentPtr).score += 10; // 或者写成 studentPtr->score += 10;
}
int main() {
Student s;
s.setInfo("Alice", 85);
s.display();
modifyStudent(&s); // 调用外部函数来修改结构体的内容
s.display(); // 显示更新后的结果
return 0;
}
```
上述代码展示了如何将结构体作为参数传递到函数中,并利用指针对其进行修改。
---
#### 初始化结构体的方法
除了直接赋值外,还有多种初始化结构体的方式[^4]。例如,可以使用大括号列表初始化器或者指定字段名来进行初始化:
```cpp
// 方法一:传统方式
Student stu1 = {"Bob", 92};
// 方法二:带命名的初始化
Student stu2{.name = "Charlie", .score = 78};
// 方法三:动态分配资源后手动设定
Student stu3;
stu3.name = "David";
stu3.score = 65;
```
如果希望简化复杂的初始化过程,则可借助宏定义完成更灵活的操作:
```cpp
#define INIT_STUDENT(name_, score_) \
(Student){.name = name_, .score = score_}
int main() {
Student stu4 = INIT_STUDENT("Eve", 88);
stu4.display();
return 0;
}
```
此技术特别适用于批量创建具有相同属性的对象场景下。
---
#### 嵌套结构体以及函数指针的应用
有时为了增强灵活性,可以在结构体内嵌入另一个结构体实例或者是函数指针类型变量[^2]。这样做的好处是可以让某些行为变得可控且易于扩展。
```cpp
typedef struct Operation {
double (*func)(double a, double b);
} OpStruct;
double add(double a, double b) {
return a + b;
}
double subtract(double a, double b) {
return a - b;
}
OpStruct createOperation(bool isAddition) {
if(isAddition){
return {.func = &add};
}else{
return {.func = &subtract};
}
}
int main(){
OpStruct op = createOperation(true);
cout<<op.func(10, 5)<<endl; // 输出应该是 '15'
op = createOperation(false);
cout<<op.func(10, 5)<<endl; // 输出应该是 '5'
return 0;
}
```
在这里,我们定义了一种新的抽象——运算符结构体 (`OpStruct`) ,它可以保存指向不同算术逻辑单元(ALU) 的函数地址。根据需求切换具体执行哪一种计算模式非常方便快捷。
---
阅读全文
相关推荐
















