C++定义2个函数int_sum(), float_sum(),分别实现两个整数或浮点数的和,用函数指针fun_p1和fun_p2来指向这两个函数,并用函数指针调用这两个函数来实现两个数的和。
时间: 2024-10-16 11:18:52 浏览: 45
在C++中,你可以定义两个函数`int_sum()`和`float_sum()`,每个函数接收两个相应的数据类型作为参数并返回它们的和。然后,可以使用函数指针来存储对这些函数的引用。以下是具体的步骤:
```cpp
// 定义两个函数
double int_sum(int a, int b) {
return a + b;
}
double float_sum(float a, float b) {
return a + b;
}
// 定义函数指针类型
typedef double (*FunctionPointer)(double, double);
// 函数指针变量,用于指向正确的函数
FunctionPointer fun_p1; // 对于int_sum
FunctionPointer fun_p2; // 对于float_sum
// 分配内存并设置函数指针
fun_p1 = &int_sum; // 将int_sum的地址赋给fun_p1
fun_p2 = &float_sum; // 将float_sum的地址赋给fun_p2
// 使用函数指针调用对应的功能
int int_result = static_cast<int>(*fun_p1(2, 3)); // 注意这里需要转换类型
float float_result = *fun_p2(2.5f, 3.7f); // 直接调用无需类型转换
相关问题
来一点有关指针函数和函数指针的练习题
指针函数和函数指针是 C++ 中的重要概念,它们有助于程序的灵活性和可复用性。这里有一个简单的练习题目以及解释:
**题目:**
1. 编写一个函数 `addNumbers(int a, int b)`,它接受两个整数并返回它们的和。
2. 创建一个指针变量,该变量指向 `addNumbers` 函数。提示:定义一个 `int (*)(int, int)` 类型的指针。
3. 使用指针调用 `addNumbers(5, 7)` 并打印结果。
4. 修改 `addNumbers` 函数,使其接受一个额外的参数类型为 float。更新指针以便仍然可以正确地调用新版本的函数。
**答案与解释:**
```cpp
// 定义 addNumbers 函数
int addNumbers(int a, int b) {
return a + b;
}
// 创建函数指针变量
int (*ptrAddNumbers)(int, int); // 声明指针类型
// 初始化指针,指向 addNumbers 函数
ptrAddNumbers = &addNumbers;
// 使用指针调用函数
int result = ptrAddNumbers(5, 7);
std::cout << "Sum: " << result << std::endl; // 输出:Sum: 12
// 更新函数原型和指针类型
float addNumbers(float a, int b) { return static_cast<int>(a) + b; } // 注意类型转换
// 更新指针,现在它可以调用新的 addNumbers(float)
ptrAddNumbers = &addNumbers; // 这里不需要类型转换,因为 C++ 会自动推断指针类型
// 再次调用函数(注意浮点数会被隐式转换成 int)
result = ptrAddNumbers(5.0f, 7);
std::cout << "New Sum: " << result << std::endl; // 输出:New Sum: 12 (由于整数溢出,实际结果可能不是预期的 12.0f)
```
**相关问题--:**
1. 如何在 C++ 中声明和初始化函数指针?
2. 动态分配函数指针时需要注意什么?
3. 函数指针能处理不同类型的参数吗?如果可以,怎么处理类型差异?
4. 在 C++ 中,如何避免类型转换错误当使用函数指针调用不同类型的函数?
阅读全文