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

C++中带默认值的函数参数

C++中带默认值的函数参数

如果一直将 Pi 声明为常量,没有给用户提供修改它的机会。然而,用户可能希望其精度更高或更低。如何编写一个函数,在用户没有提供的情况下,将 Pi 设置为默认值呢?
为解决这种问题,一种方式是给函数 Area() 新增一个表示 Pi 的参数,并将其默认值设置为您选择的值。对函数 Area() 做这样的修改后,结果将如下:

double Area(double radius, double pi = 3.14);

请注意,给第二个参数 pi 指定了默认值 3.14。对调用者来说,这个参数是可选的,因此仍可使用下面的语法来调用函数 Area(),就像第二个参数不存在一样:

Area(radius);

在这里,第二个参数将使用默认值 3.14。然而,必要时可使用两个实参来调用这个函数:

Area(radius, 3.14159); // more precise pi

以下示例程序演示了如何编写参数包含默认值的函数,这种默认值可被用户提供的值覆盖:

#include <iostream>
using namespace std;// Function Declarations (Prototypes)
double Area(double radius, double pi = 3.14);int main()
{cout << "Enter radius: ";double radius = 0;cin >> radius;cout << "pi is 3.14, do you wish to change this (y / n)? "; char changePi = 'n';cin >> changePi;double circleArea = 0;if (changePi == 'y'){cout << "Enter new pi: ";double newPi = 3.14;cin >> newPi;circleArea = Area (radius, newPi);}elsecircleArea = Area(radius); // Ignore 2nd param, use default value// Call function "Area" cout << "Area is: " << circleArea << endl;return 0;
}// Function definitions (implementations)
double Area(double radius, double pi)
{return pi * radius * radius;
}

输出:

Enter radius: 1
Pi is 3.14, do you wish to change this (y / n)? n
Area is: 3.14

再次运行的输出:

Enter radius: 1
Pi is 3.14, do you wish to change this (y / n)? y
Enter new Pi: 3.1416
Area is: 3.1416

分析:

从上述输出可知,两次运行时用户输入的半径相同,都是 1。然而,第二次运行时,用户修改了 Pi 的精度,因此计算得到的面积稍有不同。两次运行时调用的是同一个函数,如第 22 和 25 行所示。第 25 行调用 Area()时没有指定第二个参数 pi, 因此将使用默认值 3.14, 这是在第 4 行的声明中指定的。

注意:

可以给多个参数指定默认值,但这些参数必须位于参数列表的末尾。

该文章会更新,欢迎大家批评指正。

推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程

http://www.lryc.cn/news/167560.html

相关文章:

  • 记录一次部署Hugo主题lotusdocs到Github Pages实践
  • stm32---基本定时器(TIM6,TIM7)
  • HTML网页设计
  • 阶段性总结:跨时钟域同步处理
  • [交互]接口与路由问题
  • linux 6中4T磁盘识别并分区格式化挂接
  • 【Unity】ShaderGraph应用(浮动气泡)
  • Android EditText setTranslationY导致输入法覆盖问题
  • MySQL 导出和导入数据
  • ubuntu22.04 设置网卡开机自启
  • 持续部署:提高敏捷加速软件交付(内含教程)
  • Spark_Spark内存模型管理
  • C++之operator=与operator==用法区别(二百一十八)
  • 【漏洞复现】WordPress插件wp-file-manager任意文件上传漏洞(CVE-2020-25213)
  • 基于安卓Java试题库在线考试系统uniapp 微信小程序
  • Java入坑之语法糖
  • VUE响应式
  • Godot 和 VScode配置C#环境注意事项
  • 三、Mediasoup进程通信实现的原理
  • 【计算机网络】 TCP——四次挥手
  • 「Java开发指南」在MyEclipse中的Spring开发(二)
  • 策略模式,一种广泛应用于各种情况的设计模式(设计模式与开发实践 P5)
  • 90. 子集 II
  • Intel汇编语言程序设计(第7版)第四章编程练习题答案
  • EDA(Exploratory Data Analysis)探索性数据分析
  • Python中的多媒体处理库有哪些?
  • LeetCode【28. 找出字符串中第一个匹配项的下标】
  • 产业互联网开始从简单的概念,逐渐成为可以落地的存在
  • element-ui tree组件实现在线增删改
  • 华为开源自研AI框架昇思MindSpore应用案例:消噪的Diffusion扩散模型