学c++修炼(day1)

1️⃣命名空间

2️⃣输入&&输出

3️⃣ 缺省函数

4️⃣ 函数重载

简单的说下c++的头文件用#include;

  • ➡️命名空间

在这里插入图片描述
我们可以发现会出现重命名的问题,c++为了处理这个c语言遗留下的问题引入了命名空间。
命名空间的定义:定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名
空间的成员。

第一种普通写法⬇️
在这里插入图片描述

命名空间除了这个基本的使用还可以多个嵌套。
第二种嵌套写法⬇️

namespace Tencent
{
	namespace Tencent1
	{
		int a = 0;
		void f()
		{
			printf("viod f(\n");
		}

		struct  ListNode
		{
			int val;
			struct ListNode* next;
		};

	}
	namespace Tencent2
	{
		int a = 0;
		void f()
		{
			printf("viod f(\n");
		}

		struct  ListNode
		{
			int val;
			struct ListNode* next;
		};

	}

}

第三种是出现多个命名空间名称一样的问题⬇️
编译器会将多个命名空间名称一样的合并在一起。
在这里插入图片描述
为了处理这个问题CPP引入namespace xxx;通过一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中,这样就可以避免上面多个命名空间冲突问题。

namespace Tencent
{
	int f = 6;
	int rand = 8;
	int a = 21;
}
int a = 0;
int main()
{
	int a = 1;
	printf("%d\n", rand);
	printf("%d\n", f);
	printf("%d\n", Tencent::rand);
	printf("%d\n", Tencent::f);
	printf("%d\n", a);
	printf("%d\n", Tencent::a);
	return 0;
}

using namespace Tencent的意思是把Tencent命名空间定义的东西放出来。
如何输出里面的东西如上面代码的写法Tencen::rand;
还能这样

namespace HuaWei
{
	namespace HuaWei1
	{
		struct Node
		{
			int val;
			struct Node* next;
		};
	}
}
int main()
{
	struct HuaWei::HuaWei1::Node n1;
	n1.val = 99;
	struct Tencent::Tencent1::Node n2;
	n2.val = 21;

	return 0;
}

将HuaWei里面的HuaWei1进行拆分一层拆一层。但是如果一直拆拆到最后就相当没有使用该命名空间。

  • ➡️ CPP的输入&&输出


#include<iostream>
using namespace std;
int main()
{
	int a;
	double b;
	char c;
	//输入
	cin >> a;
	cin >> b >> c;
	//输出
	cout << a << endl;
	cout << b << " " << c << endl;
	return 0;
}

上面的std是c++库的命名空间。
使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。>>是流提取运算符,<<流插入运算符。<<end是换行
由于>>&&<<的使用使得cpp可以进行多个输入与多个输出并且不需要考虑类型。

  1. ➡️ 缺省函数

定义:缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
在这里插入图片描述
如果实参有值传的实参,否则像图中第一个无实参的一样用的是形参的值。

缺省函数又分为全缺省参数与半缺省参数。

1.全缺省:

using namespace std;
void TestFunc(int a = 10, int b = 20, int c = 30)
{
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "c=" << c << endl << endl;
}

int main()
{
	TestFunc();
	TestFunc(1);
	TestFunc(1,2);
	TestFunc(1,2,3);

	return 0;
}

在这里插入图片描述

2.半缺省:

//缺省
using namespace std;
void TestFunc(int a, int b = 20, int c = 30)
{
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "c=" << c << endl << endl;
}

int main()
{
	TestFunc();
	TestFunc(1);
	TestFunc(1,2);
	TestFunc(1,2,3);

	return 0;
}

将代码对比,可以得出它俩的区别。

注意:

1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现
3. 缺省值必须是常数或者全局变量。
4. 参数缺省值只能出现在函数的声明中,而不能出现在定义体中。
例:

void Foo(int x=0, int y=0); // 正确,缺省值出现在函数的声明中     
void Foo(int x=0, int y=0) // 错误,缺省值出现在函数的定义体中  { …  }
  • ➡️ 函数的重载

在 C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,即重载。
函数重载出现的理由有2个:
第一个1️⃣ 便于记忆,提高了函数的易用性。
第二个2️⃣类的构造函数需要重载机制。因为 C++规定构造函数与类同名,构造函数只能有一个名字。

c语言不支持重载理由是c语言调用时调用函数名,形参中的类型无法确定。CPP支持重载是因为调用的时候将函数名和形参类型也一同调用过去,这样编译器在相同函数名的情况下可以判断出哪个函数被调用。不然编译器和程序员都不知道哪个函数被调用。
在这里插入图片描述
CPP调用的指令在这里插入图片描述 在这里插入图片描述你会****发现前面一个zlf一样后面是函数类型的开头。这就验证了CPP调用的过程时包括了调用类型。这就是可以重载的原因。
c语言调用是:
在这里插入图片描述只有函数名被调用。所以不支持重载。

CPP为了能够使用c库使用了如下图的代码。该代码告诉编译器extern "c"声明的函数,是c库,要用c的方式去链接调用。

在《高质量的C C++编程》是这样说的:1.C++提供了一个 C 连接交换指定符号 extern“C”。2.C++编译器开发商已经对 C 标准库的头文件作了 extern“C”处理,所以我们可以用#include 直接引用这些头文件。

但是这边我们是引用了现对路径。
在这里插入图片描述

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华华的bit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值