凡科网建站模板秦皇岛网站建设报价
凡科网建站模板,秦皇岛网站建设报价,可以建网站的平台,农家乐怎么做网站C函数进阶#xff1a;默认参数与函数重载#xff0c;让你的代码更智能#xff01;
大家好#xff01;今天我们来聊聊C中两个非常实用的特性#xff1a;默认参数和函数重载。这两个特性能让我们的代码更灵活、更简洁#xff0c;提高开发效率。
一、默认参数#xff1a;让…C函数进阶默认参数与函数重载让你的代码更智能大家好今天我们来聊聊C中两个非常实用的特性默认参数和函数重载。这两个特性能让我们的代码更灵活、更简洁提高开发效率。一、默认参数让你的函数调用更智能什么是默认参数默认参数就是当函数调用时省略了某些实参编译器会自动使用的预设值。这就像给函数设置了一个“智能默认值”。如何使用默认参数默认参数必须在函数原型中指定// 设置默认参数char*left(constchar*str,intn1);// n的默认值为1这样调用left(theory, 3)→ 返回前3个字符theleft(theory)→ 返回前1个字符t使用默认值重要规则必须从右向左设置默认值// 正确从右向左intharpo(intn,intm4,intj5);// 错误不能跳过参数intchico(intn,intm6,intj);// j没有默认值调用时不能跳过参数harpo(2);// ✓ n2, m4, j5harpo(1,8);// ✓ n1, m8, j5harpo(8,7,6);// ✓ n8, m7, j6harpo(3,,8);// ✗ 不能跳过m实用示例字符串截取函数#includeiostreamusingnamespacestd;// 函数声明设置默认参数char*left(constchar*str,intn1);intmain(){charsample[]Hello World;char*ps1left(sample,5);// 前5个字符coutps1endl;// 输出: Hellodelete[]ps1;char*ps2left(sample);// 使用默认值前1个字符coutps2endl;// 输出: Hdelete[]ps2;return0;}// 函数定义char*left(constchar*str,intn){if(n0)n0;// 修正原文代码有误应该是n0char*pnewchar[n1];// 分配内存inti;for(i0;instr[i];i)p[i]str[i];p[i]\0;// 添加终止符returnp;}二、函数重载一个名字多种功能什么是函数重载函数重载允许我们创建多个同名但参数不同的函数。编译器会根据调用时提供的参数来决定使用哪个版本。重载的关键函数特征标特征标指的是函数的参数类型、数量和顺序。只要特征标不同就可以重载// 这些函数可以重载特征标不同voidprint(constchar*str,intwidth);voidprint(doubled,intwidth);voidprint(longl,intwidth);voidprint(inti,intwidth);voidprint(constchar*str);// 参数数量不同调用时如何匹配print(Pancakes,15);// 匹配第一个print(Syrup);// 匹配最后一个print(1999.0,10);// 匹配第二个print(1999,12);// 匹配第四个不能重载的情况仅返回类型不同❌longgronk(intn,floatm);doublegronk(intn,floatm);// 错误特征标相同const和非const引用特殊情况doublecube(doublex);doublecube(doublex);// 可能导致歧义引用参数的重载技巧voidsink(doubler1);// 匹配可修改的左值voidsank(constdoubler2);// 匹配const左值和右值voidsunk(doubler3);// 仅匹配右值示例doublex55.5;constdoubley32.0;sink(x);// ✓ 调用sink(double)sank(x);// ✓ 调用sank(const double)sank(xy);// ✓ 调用sank(const double)sunk(xy);// ✓ 调用sunk(double)三、综合实战重载left函数让我们重载left函数使其既能处理字符串也能处理整数#includeiostreamusingnamespacestd;// 重载1处理字符串char*left(constchar*str,intn1);// 重载2处理整数返回前n位unsignedlongleft(unsignedlongnum,unsignedct);intmain(){constchar*tripHawaii!!;unsignedlongn12345678;// 测试字符串版本char*templeft(trip,4);cout前4个字符: tempendl;// 输出: Hawadelete[]temp;// 测试整数版本cout前3位数字: left(n,3)endl;// 输出: 123return0;}// 整数版本实现unsignedlongleft(unsignedlongnum,unsignedct){if(ct0||num0)return0;// 计算数字位数unsigneddigits1;unsignedlongnnum;while(n/10)digits;// 如果请求位数大于总位数返回原数if(digitsct)returnnum;// 否则去掉后面多余的数字ctdigits-ct;while(ct--)num/10;returnnum;}四、何时使用选择指南特性适用场景优点默认参数函数大多数情况使用相同值偶尔变化减少函数数量简化调用函数重载相同功能但需要处理不同类型数据接口统一提高可读性建议如果只是参数数量不同优先考虑默认参数如果需要处理不同类型的数据使用函数重载两者结合使用让代码既简洁又强大五、小练习你能写出一个函数既能计算圆的面积area(radius)又能计算矩形的面积area(length, width)吗设计一个打印函数可以打印整数、浮点数和字符串且浮点数可以指定精度默认2位小数。掌握默认参数和函数重载能让你的C代码更加优雅和强大。在实际开发中合理使用这两个特性可以显著提高代码的可读性和可维护性。记住好的代码不仅要能运行更要易于理解和维护