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


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

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

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

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

    Area(radius);
    
    • 1

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

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

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

    #include 
    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);
        }
        else
            circleArea = 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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    输出:

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

    再次运行的输出:

    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
    • 2
    • 3
    • 4

    分析:

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

    注意:

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

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

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

  • 相关阅读:
    申请newBing后使用edge浏览器检索时“重定向次数过多”,导致无法正常使用
    Softing为连接PROFIBUS网络提供多种接口产品方案
    [21天学习挑战赛——内核笔记](四)——内核常见调试手段(printf、dump_stack、devmem)
    Centos7 安装Seata1.5.1
    MySQL到TiDB:Hive Metastore横向扩展之路
    自动化测试
    Redis-03持久化
    搭建网关服务器实现DHCP自动分配、HTTP服务和免密登录
    ASP.NET数据库连接(运行失败,不掌握)
    堆友:阿里巴巴文生图工具又出新功能(局部重绘)
  • 原文地址:https://blog.csdn.net/qq_41317716/article/details/132913954