• 回顾:C++开篇课堂


    周三,在刚刚结束矩阵分析的考试之后,面向对象程序设计课正式开始了C++的学习,这次课的重点即是面向对象思想的理解。
    梳理一下知识点。

    C++中函数的默认参数

    在函数声明或者在函数定义时,对参数赋初始值,就是函数的默认参数。

    例一: 在函数声明时设置参数的值

    #include <cstdio>
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    //在函数声明时设置参数的值 
    double calculate(double r = 1,double pi = 3.14); 
    
    int main()
    {
    	cout << calculate() << endl;
    }
    
    double calculate(double r,double pi)
    {
    	return r*r*pi;
    }
    

    结果:

    例二: 在函数定义时设置(错误)

    #include <cstdio>
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    double calculate(double r,double pi); 
    
    int main()
    {
    	cout << calculate() << endl;
    }
    
    double calculate(double r = 1,double pi = 3.14) //在定义函数时设置
    {
    	return r*r*pi;
    }
    

    结果:编译错误

    不过试了下这样子就可以了:

    #include <cstdio>
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    //double calculate(double r,double pi); 注释掉声明
    double calculate(double r = 1,double pi = 3.14)
    {
    	return r*r*pi;
    }
    
    int main()
    {
    	cout << calculate() << endl;
    }
    

    其实本质上还是在函数声明的时候设置默认参数。

    **例三: **函数声明和函数定义时同时设置默认参数(错误)

    #include <cstdio>
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    double calculate(double r = 2,double pi = 3.14); //声明时设置r为2,pi为3.14
    
    int main()
    {
    	cout << calculate() << endl;
    }
    
    double calculate(double r = 1,double pi = 3.14) //定义时设置r为1,pi为3.14
    {
    	return r*r*pi;
    }
    

    结果: 编译错误(我使用的是DEV-C++编译器)

    由此得到了第一个结论:一般在声明函数是设置默认参数。

    那么如果在主函数只传递部分参数呢?

    例一

    double calculate(double r = 2,double pi = 3.14); 
    
    int main()
    {
    	cout << calculate(1) << endl; //只传递一个参数
    }
    
    double calculate(double r,double pi)
    {
    	return r*r*pi;
    }
    

    结果:3.14

    例二

    double calculate(double r = 2,double pi = 3.14); 
    
    int main()
    {
    	cout << calculate(10,3.14) << endl; //传递两个参数
    }
    
    double calculate(double r,double pi)
    {
    	return r*r*pi;
    }
    

    结果:314

    这两个例子体现了函数中默认函数的作用,当传递进来的参数不足形参的个数时,默认其值为函数声明时设置的默认值。

    例三

    double calculate(double r,double pi = 3.14); //声明时只对右边的pi进行设置
    
    int main()
    {
    	cout << calculate(10) << endl;
    }
    
    double calculate(double r,double pi)
    {
    	return r*r*pi;
    }
    

    结果:314

    例四(错误)

    double calculate(double r = 1,double pi); //声明时只对左边的r进行设置
    
    int main()
    {
    	cout << calculate(3.14) << endl;
    }
    
    double calculate(double r,double pi)
    {
    	return r*r*pi;
    }
    

    结果:编译错误

    由例三和例四可以得出:默认参数定义的方向是从右向左

    那么如果我设置多个参数的时候,比如计算一个长方体的体积,开始的时候是这样的:

    double calculate(double l,double w,double h); 
    
    int main()
    {
    	cout << calculate(1,2,3) << endl;
    }
    
    double calculate(double l,double w,double h)
    {
    	return l*w*h;
    }
    

    结果是6,那么接下来我对l和h设置默认值:

    double calculate(double l = 1,double w,double h = 3); 
    
    int main()
    {
    	cout << calculate(2) << endl;
    }
    
    double calculate(double l,double w,double h)
    {
    	return l*w*h;
    }
    

    编译不通过,但是如果把上面的语句改成:

    double calculate(double l,double w = 2,double h = 3); 
    
    int main()
    {
    	cout << calculate(2) << endl;
    }
    
    double calculate(double l,double w,double h)
    {
    	return l*w*h;
    }
    

    结果就是正确的12了。

  • 相关阅读:
    Python接口测试
    Python数据类型间互转(字典、字符串、列表、元组)
    Jenkins自动构建部署(Maven+SVN+Tomcat7))
    Hadoop搭建HA环境(Hadoop+HBase+Zookeeper)注意事项
    CentOS中安装使用ssh
    CentOS中设置网络
    CentOS中永久修改主机名
    jsp页面动态的显示当前系统的时间
    css样式解决不同IE版本之间的兼容问题
    java.lang.NoClassDefFoundError: org/apache/jsp/licence_jsp (wrong name: org/apache/jsp/Licence_jsp)
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5509960.html
Copyright © 2020-2023  润新知