回顾: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了。

posted @ 2016-05-19 20:12  Wasdns  阅读(151)  评论(0编辑  收藏  举报