@C++
Lesson 1.缺省参数和函数重载
1.C++关键字(在C++98中有63个关键字)
2.命名空间:使用命名空间的目的:对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题。
a.命名空间的定义
i.定义命名空间,需要用到namespace关键字,后面跟命名空间的名字,然后接一对{},{}中为命名空间成员
注意:一个命名空间就定义了一个新的作用域。可以定义多个名称相同的命名空间,但多个命名空间内不能定义同名变量
b.命名空间的使用
i.加命名空间名称及作用于限定符
每次都需要加作用域限定符::
// 1.命名空间名::成员名
//N1也是作用域
namespace N1
{
//成员
int a = 100;
int Add(int left, int right)
{
return left + right;
}
}
//全局作用域
int a = 10;
int main()
{
int a = 1000;
printf("%d\n", a);
printf("%d\n", :: a);//::a 全局作用中的a
printf("%d\n", N1::a);//N1::a N1作用中的a
return 0;
}
1000
10
100
ii.使用using命名空间将成员引入(常用)
// 2.使用using将命名空间中成员引入
// using N1::a
//N1也是作用域
namespace N1
{
//成员
int a = 100;
int Add(int left, int right)
{
return left + right;
}
}
//此时N1命名空间中的a相当于此文件中的全局变量a
using N1::a;
int main()
{
int a = 1000;
printf("%d\n", a);
printf("%d\n", ::a);//::a 全局作用中的a
return 0;
}
1000
100
iii.使用using namespace 命名空间名称引入
std名字空间暴露到全局地,容易造成大面积冲突
// 3.使用using namespace 命名空间名称引入
//N1也是作用域
namespace N1
{
//成员
int a = 100;
int Add(int left, int right)
{
return left + right;
}
}
//将N1中的成员容易造成大面积冲突
using namespace N1;
int main()
{
printf("%d\n", a);
printf("%d\n", ::a);//::a 全局作用中的a
return 0;
}
100
100
3.C++输入输出
a.使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含头文件以及std命名空间
b.使用C++输入输出更加方便,不需要增加数据格式控制
1.输入输出更加方便
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!!" << endl;
cout << "Hello world!!" << "\n";//支持C语言,"\n"也可以换行
return 0;
}
Hello world!!
Hello world!!
2.不需要增加数据格式控制
int main()
{
int a, b, c;
double d;
cin >> a >> b >> c>>d;
cout << a << " " << b << " " << c <<" " << d<<endl;
return 0;
}
10 20 30 40.5
10 20 30 40.5
4.缺省参数
4.1缺省参数概念
void Test(int a = 123)//为函数的参数指定一个默认值(123)
{
cout << a << endl;
}
int main()
{
Test(555);//调用该函数时,有指定实参(555)时,使用指定实参(555)
Test();//调用该函数时,无指定实参时,使用该默认值(123)
return 0;
}
555
123
4.2缺省参数分类
2.全缺省参数
//1.全缺省参数--所有参数都存在默认值
using namespace std;
void Test(int a = 10, int b = 20, int c = 30)
{
cout << a << " " << b << " " << c << endl;
}
int main()
{
Test();
Test(1);
Test(1, 2);
Test(1,2,3);//用反汇编查看到传递的为3->2->1, why?
return 0;
}
10 20 30
1 20 30
1 2 30
1 2 3
可以通过反汇编查看传递的参数
Test(1,2,3);
00007FF64AC51B9A mov r8d,3
00007FF64AC51BA0 mov edx,2
00007FF64AC51BA5 mov ecx,1
00007FF64AC51BAA call Test (07FF64AC514DDh)
注意:
1.半缺省参数必须从右往左依次给出不能间隔着给出
2.缺省参数不能再函数声明与定义中同时出现
3.缺省参数必须是常量会全局变量
4.C语言不支持(编译器不支持)
1.半缺省参数
void Test(int a , int b , int c = 30)
{
cout << a << " " << b << " " << c << endl;
}
int main()
{
//Test();
//Test(1);
Test(1, 2);
Test(1, 2, 3);
return 0;
}
1 2 30
1 2 3
5.函数重载
a.函数重载概念
是函数的一种特殊情况,C++允许在同一作用域中声明几个功能相
同的同名函数,这些同名函数的形参列表(参数个数,类型,顺序
)必须不同,常用来处理功能类似数据类型不同的问题
//1.参数个数
void Test()
{
cout << "Test()" << endl;
}
void Test(int a)
{
cout << "Test(int)" << endl;
}
//2.参数类型
void Test(double a)
{
cout << "Test(double)" << endl;
}
//3.类型的次序
void Test(int a,double b)
{
cout << "Test(int ,double)" << endl;
}
void Test(double a,int b)
{
cout << "Test(double,int)" << endl;
}
希望这篇文章能对你有所帮助。