c++02:函数重载——让同名函数 “多态” 起来
函数重载是 C 实现编译期多态的核心手段它允许我们定义多个同名函数只要它们的参数列表特征标不同编译器就能根据调用时的实参自动匹配最合适的版本。一、重载的核心规则1. 什么是 “不同的参数列表”函数的参数个数或参数类型不同才构成合法重载参数个数不同int add(int, int)与int add(int, int, int)参数类型不同int add(int, int)与double add(double, double)2. 哪些情况不能重载❌ 仅返回值类型不同int add(int, int)与double add(int, int)❌ 仅形参名不同int add(int x, int y)与int add(int a, int b)❌ 类型与类型引用视为同一种void Fun(double)与void Fun(double)3. 特殊合法重载const 修饰const与非const指针 / 引用可构成重载编译器会根据实参的const属性匹配void Fun(char* str) { cout 非const版本\n; } void Fun(const char* str) { cout const版本\n; }二、基础示例求和函数重载用add函数实现整数 / 浮点数的 2 数、3 数求和#include iostream using namespace std; // 2个整数相加 int add(int x, int y) { return x y; } // 3个整数相加 int add(int x, int y, int z) { return x y z; } // 2个浮点数相加 double add(double x, double y) { return x y; } // 3个浮点数相加 double add(double x, double y, double z) { return x y z; } int main() { cout add(2, 3) endl; // 调用int版本输出5 cout add(2, 3, 4) endl; // 调用3参数int版本输出9 cout add(1.1, 2.2) endl; // 调用double版本输出3.3 return 0; }当重载包含左值引用、const左值引用、右值引用时编译器会按 “最匹配” 原则选择可修改左值 → 匹配Tconst左值 → 匹配const T右值临时值 → 匹配T#include iostream using namespace std; void stove(double r) { cout 左值引用: r endl; } void stove(const double r) { cout const左值引用: r endl; } void stove(double r) { cout 右值引用: r endl; } int main() { double x 55.5; const double y 32.0; stove(x); // 匹配double stove(y); // 匹配const double stove(xy); // 匹配double临时值 return 0; }若未定义double版本右值会降级匹配const double版本。四、避坑总结情况是否可重载原因参数个数 / 类型不同✅特征标不同仅返回值不同❌编译器无法通过返回值区分调用仅形参名不同❌特征标完全一致T与T❌视为同一种参数类型T*与const T*✅const修饰构成不同特征标五、总结函数重载让我们能用统一的函数名处理不同类型 / 数量的输入提升代码可读性与复用性。核心是让参数列表区分开同时注意const、引用等特殊场景的匹配规则避免二义性。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2410337.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!