回顾: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了。
To improve is to change, to be perfect is to change often.