最近在学习C++ ,下面整理学习的步骤和笔记,以便日后查看,希望对读者有帮助。 若喜欢的话可以三连支持一下,谢谢!
函数的默认参数
在C++中,函数的形参列表中的形象是可以有默认值的。
语法: 返回值类型 函数名 (参数 = 默认值) {}
因为b有默认参数,所以b后面变量都得有默认值
最后一个有,但前面没有是可以的
#include <iostream>
using namespace std;
int func1(int a, int b, int c)
{
return a + b + c;
}
//注意事项
//如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值
int func2(int a,int b, int c,int d = 20)
{
return a + b + c;
}
//如果函数的声明有了默认参数,函数实现就不能默认参数
//声明和实现只能有一个默认参数
int func3(int a = 10, int b = 10);
//或int func3();
//或int func3(int a = 10, int b = 10){}
int func3(int a,int b)
{
return a + b;
}
int main()
{
cout << func3() << endl;
system("pause");
return 0;
}
函数的占位参数
C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法: 返回值类型 函数名 {数据类型}{}
在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术。
#include <iostream>
using namespace std;
void func(int a, int b)
{
cout << "this is func." << endl;
}
int main()
{
func(10, 10);
system("pause");
return 0;
}
注意:func()里面必须给形参赋值,比如func(10,10)
函数重载
作用:函数名可以相同,提高复用性
函数重载满足条件:
- 同一个作用域下
- 函数名称相同
- 函数参数类型不同 或者 个数不同 或者 顺序不同
注意:函数的返回值不可以作为函数重载的条件
有如下情况
#include <iostream>
using namespace std;
//1.同一个作用域下
//2.函数名称相同
//3.函数参数 类型不同 或者 个数不同 或者 顺序不同
void func()
{
cout << "func 的调用" << endl;
}
void func(int a)
{
cout << "func(int a)的调用" << endl;
}
int main()
{
func();
system("pause");
return 0;
}
#include <iostream>
using namespace std;
//1.同一个作用域下
//2.函数名称相同
//3.函数参数 类型不同 或者 个数不同 或者 顺序不同
void func()
{
cout << "func 的调用" << endl;
}
void func(int a)
{
cout << "func(int a)的调用" << endl;
}
void func(double a)
{
cout << "func(double a)的调用" << endl;
}
void func(int a, double b)
{
cout << "func(int a, double b)的调用" << endl;
}
void func(double a, int b)
{
cout << "func(double a, int b)的调用" << endl;
}
int main()
{
func(10);
func(3.14);
func(3.14,2);
func(3.14, 2);
system("pause");
return 0;
}
函数重载的注意事项
引用作为重载条件
函数重载碰到函数默认参数
#include <iostream>
using namespace std;
void func(int a)
{
cout << "func(int a)的调用" << endl;
}
void func(int& a)
{
cout << "func(int& a)的调用" << endl;
}
int main()
{
func(10);
system("pause");
return 0;
}
#include <iostream>
using namespace std;
//void func(int a)
//{
// cout << "func(int a)的调用" << endl;
//}
void func(int& a)
{
cout << "func(int& a)的调用" << endl;
}
void func(const int& a)
{
cout << "const int& a" << endl;
}
int main()
{
int a = 10;
func(a);
system("pause");
return 0;
}
运行结果:
#include <iostream>
using namespace std;
//void func(int a)
//{
// cout << "func(int a)的调用" << endl;
//}
void func(int& a)
{
cout << "func(int& a)的调用" << endl;
}
void func(const int& a)
{
cout << "const int& a的调用" << endl;
}
int main()
{
//int a = 10;
//func(a);
func(10);
system("pause");
return 0;
}
因为10是放在常量区,而引用必须是一个合法的内存空间,比如在堆区