栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

学c++修炼(day1)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学c++修炼(day1)

c++入门基础
      • :one:命名空间
      • :two:输入&&输出
      • :three: 缺省函数
      • :four: 函数重载
    • :arrow_right:命名空间
    • :arrow_right: CPP的输入&&输出
    • :arrow_right: 缺省函数
      • 1.全缺省:
      • 2.半缺省:
    • 注意:
    • :arrow_right: 函数的重载
      • 在《高质量的C C++编程》是这样说的:1.C++提供了一个 C 连接交换指定符号 extern“C”。2.C++编译器开发商已经对 C 标准库的头文件作了 extern“C”处理,所以我们可以用#include 直接引用这些头文件。

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("%dn", rand);
	printf("%dn", f);
	printf("%dn", Tencent::rand);
	printf("%dn", Tencent::f);
	printf("%dn", a);
	printf("%dn", 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
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标准命名空间。>>是流提取运算符,<<流插入运算符。< 由于>>&&<<的使用使得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 直接引用这些头文件。

但是这边我们是引用了现对路径。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847267.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号