lesson 1.缺省参数和函数重载

本文介绍了C++中的命名空间使用,包括定义与引用方式,强调了全局作用域与命名空间作用域的区别。接着讲解了C++的输入输出操作,通过iostream库和std命名空间简化输入输出过程。然后讨论了缺省参数的定义和分类,以及全缺省参数的传递规则。最后,文章阐述了函数重载的概念,展示了不同参数列表实现函数重载的例子。
摘要由CSDN通过智能技术生成

@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;
}

希望这篇文章能对你有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值