当前位置: 首页 > ai >正文

【C++】第四章—— 函数重载 Function Overloading 笔记

📌 一、什么是函数重载

函数重载:同一个作用域内可以定义多个 函数名相同、但参数列表不同的函数。

编译器会根据调用时传入的参数个数、类型、顺序进行区分,自动匹配最合适的函数。


✅ 作用:

  • 提高代码可读性;
  • 让多个相似功能的函数统一名称,接口更简洁;
  • 是 C++ 支持“多态”的基础之一(静态多态)。

📚 二、函数重载的条件

✅ 必须不同的有:

  • 参数个数不同
  • 参数类型不同
  • 参数顺序不同(类型顺序)
void print(int a);
void print(double a);           // 类型不同
void print(int a, int b);       // 参数个数不同
void print(double a, int b);    // 类型顺序不同

❌ 不构成重载的情况:

  1. 仅返回值不同
int sum(int a);     // 合法
double sum(int a);  // ❌ 不合法:返回值不同但参数完全相同
  1. 仅参数名不同
int sum(int x);     // 合法
int sum(int y);     // ❌ 不合法:只是名字不同

🔧 三、函数重载示例

#include <iostream>
using namespace std;void print(int a) {cout << "整型: " << a << endl;
}void print(double a) {cout << "浮点型: " << a << endl;
}void print(string a) {cout << "字符串: " << a << endl;
}int main() {print(10);          // 输出:整型: 10print(3.14);        // 输出:浮点型: 3.14print("Hello");     // 输出:字符串: Helloreturn 0;
}

🚫 四、与默认参数的冲突

函数重载与默认参数可能导致二义性。

void func(int a);
void func(int a, int b = 10);func(5);  // ❌ 二义性:编译器不知调用哪一个

✅ 建议避免重载函数中出现过多默认参数,或设计时注意不冲突。


🧠 五、函数重载 + const 的区分

void show(int a);
void show(const int a);  // ❌ 与上函数视为相同,重定义

✅ 但对于 指针/引用 参数,const 可形成重载:

void display(int& x);       // 非 const 引用
void display(const int& x); // const 引用,合法重载

🔁 六、函数重载与 inline / static 的关系

  • inlinestatic 不影响重载判断;
  • 判断重载仅看:参数列表是否不同

🧱 七、重载构造函数(构造函数重载)

构造函数也可以重载,根据参数不同创建不同初始化方式。

class Box {
public:Box() { cout << "默认构造" << endl; }Box(int l) { cout << "单参数构造: " << l << endl; }Box(int l, int w) { cout << "双参数构造: " << l << ", " << w << endl; }
};int main() {Box b1;          // 默认构造Box b2(10);      // 单参Box b3(10, 20);  // 双参return 0;
}

⚠️ 八、函数模板与重载的优先级

当普通函数与函数模板都能匹配时,优先调用普通函数

void show(int a) {cout << "普通函数" << endl;
}template<typename T>
void show(T a) {cout << "模板函数" << endl;
}int main() {show(5);  // 调用普通函数show(3.14); // 调用模板函数
}

📝 九、小结

项目是否影响重载
参数个数不同✅ 是
参数类型不同✅ 是
参数顺序不同✅ 是
返回值不同❌ 否
参数名不同❌ 否
默认参数冲突⚠️ 可能引起二义性
const 修饰(非引用)❌ 无效
const 修饰(引用/指针)✅ 有效

🎯 建议与实践

  • 使用函数重载可以统一接口,增强代码可读性;
  • 避免默认参数引起的二义性;
  • 对于模板编程,配合重载使用更灵活;
  • 若设计多个功能类似函数,考虑重载而非新命名。

http://www.xdnf.cn/news/14937.html

相关文章:

  • android activity生命周期温习
  • JSP数据交互
  • JAVA如何实现Redis同步
  • 软件发布的完整流程梳理
  • 每日mysql
  • Debezium:一款基于CDC的开源数据同步工具
  • 如何使用Pytest进行测试?
  • Ubuntu22.04 设置显示存在双屏却无法双屏显示
  • MS32C001-C单片机,32位ARM M0+内核,宽电压、低功耗、小封装。
  • 【图像处理基石】如何检测到画面中的ppt并对其进行增强?
  • 【问题思考总结】两个向量之和的二范数公式是什么?
  • Shell 脚本0基础教学(一)
  • 景观桥 涵洞 城门等遮挡物对汽车安全性的影响数学建模和计算方法,需要收集那些数据
  • Windows Subsystem for Linux (WSL):现代开发的终极跨平台方案
  • 专题一_双指针_有效三角形的个数
  • 【Linux | 网络】socket编程 - 使用TCP实现服务端向客户端提供简单的服务
  • 通过Tcl脚本命令:set_param labtools.auto_update_hardware 0
  • Spring Cloud服务注册与发现:架构设计与技术实践深度分析
  • VS Code侧边栏的“资源管理器找不到解决办法“、VScode重置视图位置/还原默认视图位置
  • Linux建立本地软件仓库
  • Spring Boot 扩展点深度解析:设计思想、实现细节与最佳实践
  • 【Oracle报错】[INS-13001] 环境不满足最低要求。
  • MySQL8.0基于GTID的组复制分布式集群的环境部署
  • Rust赋能美团云原生DevOps实践
  • uni-app uni-push 2.0推送图标不展示问题
  • 【HarmonyOS6】获取华为用户信息
  • 2025年人工智能、虚拟现实与交互设计国际学术会议
  • 客户端与服务端数据加密方案及实现
  • 1️⃣理解大语言模型
  • 深度学习——损失函数