• C++中为何需要函数


    C++中为何需要函数

    函数的概念大家都不陌生,可以说C++程序都是由函数构成的,首先是主函数,然后主函数中调用处理问题所需的另一些函数,而这些函数中又可以调用其他函数,在递归函数中函数甚至可以调用自己。函数间的这种关系和榫卯结构很类似:榫卯结构通过榫头和卯眼来相互固定,而函数间通过参数与返回值相互调用。

    假设要编写一个应用程序,让用户输入圆的半径并计算其周长和面积。为此,一种方式是将所有逻辑都放在 main() 中。另一种方式是将该应用程序划分成逻辑块,具体地说是两个逻辑块,它们分别根据半径计算面积和周长,如下面的示例程序所示:

    #include 
    using namespace std;
    
    const double Pi = 3.14159265;
    
    // Function Declarations (Prototypes)
    double Area(double radius);
    double Circumference(double radius);
    
    int main()
    {
        cout << "Enter radius: ";
        double radius = 0;
        cin >> radius;
    
        // Call function "Area" 
        cout << "Area is: " << Area(radius) << endl;
    
        // Call function "Circumference"
        cout << "Circumference is: " << Circumference(radius) << endl;
    
        return 0;
    }
    
    // Function definitions (implementations)
    double Area(double radius)
    {
        return Pi * radius * radius;
    }
    
    double Circumference(double radius)
    {
        return 2 * Pi * 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

    输出:

    Enter radius: 6.5
    Area is: 132.732
    Circumference is: 40.8407
    
    • 1
    • 2
    • 3

    分析:

    这里的 main()(它本身也是一个函数)相当简洁,它将工作委托给 Area()Circumference() 等函数去完成,并在第 16 和 19 行分别调用它们。
    该程序演示了使用函数进行编程涉及的如下内容:
    • 第 6 和 7 行声明了函数原型,这样在 main() 中使用 Area 和 Circumference 时,编译器知道它们是什么;
    • 在 main() 中,第 16 和 19 行调用了函数 Area()Circumference()
    • 第 25~28 行定义了函数 Area(),而第 30~33 行定义了函数 Circumference()
    您需要知道的是,通过将计算面积和周长的代码放到不同的函数中,有助于提高可重用性,因为可根据需要重复地调用这些函数。

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

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

  • 相关阅读:
    基于 chinese-roberta-wwm-ext 微调训练中文命名实体识别任务
    Qt5开发从入门到精通——第十二篇一节(Qt5 事件处理及实例——多线程及简单实例)
    【LeetCode刷题(数据结构与算法)】:上下翻转二叉树
    刷一下算法
    如何消除左递归、何时需要消除左递归—编译原理
    ESP8266-Arduino编程实例-SHT21温度湿度传感器驱动
    (附源码)springboot自律健身房会员管理系统 毕业设计456466
    Hello Vector DB|认识一下,这才是真正的向量数据库
    tar.gz文件修复
    JS模块化
  • 原文地址:https://blog.csdn.net/qq_41317716/article/details/132898533