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

【C++初阶】- 基础

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

【C++初阶】- 基础

 

目录

1. 命名空间

1.1 命名冲突

1.2 命名空间定义

1.3 命名空间的使用

2. 输入输出

3. 缺省参数

 3.1 缺省参数分类

4. 函数重载

4.1 函数重载概念

4.2 为什么C++支持函数重载而C不支持?


C++是兼容C语言的 

1. 命名空间

1.1 命名冲突

我们在C语言里,是不能定义两个相同的名字。比如

在stdlib.h库中有一个库函数也叫rand,这就导致了命名冲突的问题。

在我们以后与别人合作时,定义变量或函数时用了同样的名字,项目和项目之间会冲突。在C语言中,只能一方修改名字进行解决,这就很麻烦。C++为了解决这个问题,就有了命名空间。

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称都将存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

1.2 命名空间定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

普通的命名空间

namespace N1 // N1为命名空间的名称
{
	// 命名空间中的内容,既可以定义变量,也可以定义函数
	int a;
	int Func(int n)
	{
		return n + 1;
	}
}

嵌套使用命名空间 

namespace N2
{
	int a;
	int b;
	int Func1(int n)
	{
		return n + 1;
	}
	namespace N3
	{
		int c;
		int d;
		int Func2(int n)
		{
			return n + 2;
		}
	}
}

一个工程中的多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

//再定义一个命名空间N1
namespace N1
{
	int Func3(int n)
	{
		return n + 3;
	}
}


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

1.3 命名空间的使用

命名空间的使用有三种方式:

namespace my
{
    int b = 20;
	int a = 10;
}


加命名空间名称及作用域限定符

int main()
{
	printf("a = %dn", my::a);
}

 使用using将命名空间中成员引入

using my::b;
int main()
{
	printf("a = %dn", my::a);
	printf("b = %dn", b);
}

使用using namespace 命名空间名称引入
 

using namespace my;
int main()
{
	printf("a = %dn", a);
	printf("b = %dn", b);
}

为什么C++编程时几乎每次都要敲上using namespace std;

因为cout,cin等都是在C++标志库(std)里面定义的;

2. 输入输出

C++的输入和输出可以继续用C语言的那一套,但是C++的更加简单。

 cin >> 是输入流,向cin输入的内容流到a、b里面保存起来。

cout << 是输出流,从a、b里面流出到cout中。

endl 和’n’相同,表示换行。

使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。
使用C++输入输出更方便,不需增加数据格式控制,比如:整形–%d,字符–%c
cout(ostream)、cin(istream)在C++中是对象,>>(流提取运算符)、<<(流插入运算符)其实是运算符重载,以后再详细讲解。
 

3. 缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。


没有传参时,使用参数的默认值 

传参时,使用指定的实参

 3.1 缺省参数分类

1. 全缺省参数

void Func(int a = 1, int b = 2, int c = 3)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl << endl;
}

int main()
{
	Func();
	Func(10);
	Func(10, 20);
	Func(10, 20, 30);
	return 0;
}

传参只能按顺序传,不能用这种TestFunc(, , 30);方式传参。 

2. 半缺省参数

半缺省并不是缺省一半的参数,而是缺省部分参数。

void Func(int a, int b = 2, int c = 3)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl << endl;
}

int main()
{
	Func(10);
	Func(10, 20);
	Func(10, 20, 30);
	return 0;
}

 半缺省参数必须从右往左缺省,并且是连续的。

缺省参数不能在函数声明和定义中同时出现
如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。

 所以,只能在函数声明的时候缺省参数。

4. 函数重载

4.1 函数重载概念

C语言不支持同名函数,但是C++支持在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,与返回类型、是否为缺省参数无关,常用来处理实现功能类似数据类型不同的问题。

int Func(int a, int b)
{
	return a + b;
}

double Func(double a, double b)
{
	return a + b;
}

double Func(int a, double b)
{
	return a + b;
}

double Func(double a, int b)
{
	return a + b;
}

看看下面这几种是不是函数重载呢?

int Func(int a, int b)
{
	return a + b;
}

double Func(int a, int b)
{
	return a + b;
}

显然不是。因为判断是否为函数重载,与函数的返回类型无关。

4.2 为什么C++支持函数重载而C不支持?

在代码进行汇编的时候,C语言区别函数只依赖函数名,因此如果有相同函数名的函数,那么汇编中会出现两个相同的名字,这样在C语言编译连接时就无法区分该使用哪个函数。
C++区别函数依赖于函数名和形参列表。
返回值不同不能区分同名函数,而形参列表不同可以区分同名函数,这就是为什么重载函数的形参列表必须不同。
 

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

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

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