文章目录
c++ primer plus 第八章 函数探幽,学习心得分享
1. 默认参数的概念
默认参数指的是当函数调用中省略了实参时自动使用的一个值。
例如 将 void wow(int n)
设置成 n有默认值为1,则函数调用 wow()
就相当于 wow(1)
2. 如何设置默认值呢?
必须通过函数原型。由于编译器通过查看原型来了解函数所使用的参数数目,因此函数原型也必须将可能的默认参数告知程序。
int show(int n =1);
2.1 对于带参数列表的函数,必须从右向左添加默认值
也就是说,要为某一个参数设置默认值。则必须为它右边的所有参数提供默认值。
int a(int n, int m =4, int j = 5); ----->这个是有效的
int b(int n, int m = 5, int j);------>无效的
int c(int n = 1, int m = 2, int j = 3)---->有效的
所以调用c 函数的时候允许 提供 1, 2, 3个参数
c(1)----> c(1, 2, 3);---->n = 1; 其他形参使用默认值
c(2,5)--->c(2,5,3)----->n = 2, m = 5, j = 3;
c(7,8, 9)----->默认参数不生效了!
2.2 实参从左到右顺序依次赋值给相应的形参,而不能跳过任何参数。
因此下面的调用是不允许的。
c(1, , 4); ----> 并不是调用c(1,2,4)
3. 举一个简单的例子
3.1 写在函数实现的时候会报错
#include <iostream>
using namespace std;
int c(int n = 1, int m = 2, int j = 3);
int main()
{
c(1);//----> c(1, 2, 3);---->n = 1; 其他形参使用默认值
c(2,5);//--->c(2,5,3)----->n = 2, m = 5, j = 3;
c(7,8, 9);//----->默认参数不生效了!
return 0;
}
int c(int n, int m, int j)
{
cout << "n=" << n << ", m=" << m << ", j=" << j << endl;
}
运行的结果
book@book-desktop:~/meng-yue/c++/function/01$ ./demo
n=1, m=2, j=3
n=2, m=5, j=3
n=7, m=8, j=9
book@book-desktop:~/meng-yue/c++/function/01$
4. 书里面带的官方例子
#include <iostream>
const int ArSize = 80;
char * left(const char * str, int n = 1);
int main()
{
using namespace std;
char sample[ArSize];
cout << "Enter a string:\n";
cin.get(sample,ArSize);
char *ps = left(sample, 4);
cout << ps << endl;
delete [] ps; // free old string
ps = left(sample);
cout << ps << endl;
delete [] ps; // free new string
// cin.get();
// cin.get();
return 0;
}
// This function returns a pointer to a new string
// consisting of the first n characters in the str string.
char * left(const char * str, int n)
{
if(n < 0)
n = 0;
char * p = new char[n+1];
int i;
for (i = 0; i < n && str[i]; i++)
p[i] = str[i]; // copy characters
while (i <= n)
p[i++] = '\0'; // set rest of string to '\0'
return p;
}
运行的结果,left(sample) 做的事情就是相当于 调用 left(sample, 1)
book@book-desktop:~/meng-yue/c++/function/01$ ./demo
Enter a string:
meng-yue-foundation
meng
m
5. 去哪获取笔记和详细的资料
代码资料的路径