目录

1. C++关键字

2. 命名空间

2.1 命名空间的定义

2.2 命名空间的使用

3. C++输入&输出

4. 缺省参数

4.1 缺省参数概念

4.2 缺省参数分类

5. 函数重载

5.1 函数重载概念

5.2 C++支持函数重载的原理——名字修饰(name Mingling)

5.3 extern "C"


❀❀❀没有坚持的努力,本质上并没有多大的意义。


1. C++关键字

C++ 总计 63 个关键字, C 语言 32 个关键字

【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入&输出、缺省参数、函数重载-LMLPHP

2. 命名空间

2.1 命名空间的定义

同一个作用域里面,是不能有同名变量的。

命名冲突,在C语言没有很好的解决这个问题,但是CPP引入了namespace来解决这个问题。

使用命名空间的目的是 对标识符的名称进行本地化 ,以 避免命名冲突或名字 污染(一个命名空间就定义了一个新的作用域)

命名空间可以定义变量

#include <iostream>
//这是一个命名空间,可以定义变量、函数、类型
namespace ky
{
	int a = 0;
	int c = 2;
}

int b = 0;
int c = 1;

int main()
{
	int b = 1;
	int a = 1;
	printf("%d\n", b);//b = 1,访问局部变量
	printf("%d\n", ::b);//b = 0, 访问全局变量//::域作用限定符
	printf("%d\n", a);//a = 1;
	printf("%d\n", ky::a);//a = 0;
	printf("%d\n", c);//1
	printf("%d\n", ::c);//1
	printf("%d\n", ky::c);//2
	return 0;
}

命名空间可以定义函数、类型

#include <iostream>
namespace yyqx
{
	//定义函数
	void f()
	{
		printf("void f()\n");
	}
	//定义结构
	struct ListNode
	{
		int val;
		struct ListNode* next;
	};

}

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

}

int f = 0;
int main()
{
	printf("%d\n", f);//0
	printf("%p\n", yyqx::f);//结构体的地址
	yyqx::ListNode* n1 = NULL;
	ky::ListNode*  n2 = NULL;
	return 0;
}

命名空间可以嵌套而且同名的命名空间是可以同时存在的,编译器编译时会将其合并。

代码1展示: 

#include <iostream>

namespace yyqx
{
	int a = 1;
	namespace A
	{
		struct Node
		{
			int val = 0;
			struct Node* next= NULL;
		};
	}
	
}

namespace yyqx
{
	int b = 1;
	namespace B
	{
		struct Node
		{
			int val = 0;
			struct Node* next = NULL;
		};
	}
	
}

int main()
{
	struct yyqx::A::Node n1;
	struct yyqx::B::Node n2;

	return 0;
}

命名空间不影响生命周期,是全局变量还是全局变量,只是命名发生冲突时,进行隔离的作用。【命名空间只能放在全局】

注意: 一个命名空间就定义了一个新的作用域 ,命名空间中的所有内容都局限于该命名空间中

2.2 命名空间的使用

using namespace yyqx;//意思是把yyqx这个命名空间定义的内容释放出来
int main()
{
	struct A::Node n1;
	struct B::Node n2;

	return 0;
}
using namespace yyqx;//意思是把yyqx这个命名空间定义的内容释放出来
using namespace A;//第二层释放
//因为A在yyqx里面,所以上面两行的内容不能进行交换
int main()
{
	struct Node n1;
	struct B::Node n2;

	return 0;
}

 这里代码释放A,就不能释放B,否则就发生命名冲突(using相当于没有命名空间)

3. C++输入&输出

#include <iostream>
using namespace std;

int main()
{
	int a = 0;
	cin >> a;// >>流提取运算法,相当于scanf
	cout << a;// << 流插入运算法

	return 0;
}

【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入&amp;输出、缺省参数、函数重载-LMLPHP

#include <iostream>
using namespace std;

int main()
{
	int a = 0;
	double b = 0;
	cin >> a >> b;// >>流提取运算法,相当于scanf
	cout << a << " " << b << endl;// << 流插入运算法 endl相当于换行
	cout << a << ":" << b << '\n';
	cout << "hello world" << endl;
	return 0;
}

【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入&amp;输出、缺省参数、函数重载-LMLPHP

4. 缺省参数

4.1 缺省参数概念

缺省参数是 声明或定义函数时 为函数的 参数指定一个缺省值 。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
#include <iostream>
using namespace std;

//缺省参数(默认参数)
void Test(int a = 0)
{
	cout << a << endl;
}

int main()
{
	Test();//没有传参时,使用参数的默认值a = 0
	Test(1);//传参时,使用指定的实参 a = 1;
}

4.2 缺省参数分类

(1)全缺省参数(全默认参数)

void Test(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}

(2)半缺省参数

void Test(int a , int b = 20, int c = 30)//必须从右向左缺省,并且是连续的
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}

5. 函数重载

5.1 函数重载概念

函数重载: 是函数的一种特殊情况, C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 参数类型顺序)不同 ,常用来处理实现功能类似数据类型不同的问题。
函数重载的条件:函数名相同、参数不同

(1)参数类型不同

int Add(int left, int right)
{
	return left + right;
}
double Add(double left, double right)
{
	return left + right;
}

(2)参数个数不同

void f()
{
	cout << "f()" << endl;
}
void f(int a)
{
	cout << "f(int a)" << endl;
}

(3)参数类型顺序不同

void f(int a, char b)
{
	cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
	cout << "f(char b, int a)" << endl;
}

代码:

short Add(short left, short right)
{
	return left + right;
}
int Add(short left, short right)
{
	return left + right;
}

 上述代码不是函数重载,因为函数进行调用的时候,并不知道要调用哪一个函数。(仅仅只有返回值不同是不能构造函数重载的)函数重载要求参数不同。而跟返回值没关系。

5.2 C++支持函数重载的原理——名字修饰(name Mingling)

C语言不支持重载,C++支持重载。C++是如何支持的?为什么C语言不支持?

//函数1
void f(int a, double b)
{
	printf("%d %lf\n", a, b);
}
//函数2
void f(double b, int a)
{
	printf("%lf %d\n", b, a);
}

链接的时候,有符号表和函数调用指令。 

C语言中,函数1和函数2,生成的符号表,都是f,所以会发生冲突,所以会发生错误,C语言就不支持函数重载

【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入&amp;输出、缺省参数、函数重载-LMLPHP

 但是在C++中,函数1和函数2生成的符号表是不同的,所以C++就支持函数重载

【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入&amp;输出、缺省参数、函数重载-LMLPHP

 【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入&amp;输出、缺省参数、函数重载-LMLPHP

5.3 extern "C"

在C语言中,extern "C" 可以添加在函数声明的前面,也可以extern "C"后添加一个花括号,然后把函数声明括起来
在函数前加 extern "C",作用是告诉编译器,将该函数按照C 语言规则来编译。
07-28 11:21