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

C++ 命名空间 缺省参数 函数重载

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

C++ 命名空间 缺省参数 函数重载

文章目录
  • 1.命名空间
    • 1.1 C++为什么要引入命名空间
    • 1.2 命名空间的定义
    • 1.3 命名空间的使用
    • 1.4 注意事项
  • 2.缺省参数
    • 2.1 缺省参数的概念
    • 2.2 缺省参数的分类
    • 2.3 缺省参数的注意事项
  • 3.函数重载
    • 3.1 C++为什么支持函数重载
    • 3.2 什么是函数重载
    • 3.3 extern "C"

1.命名空间 1.1 C++为什么要引入命名空间

在编程的过程中,变量、函数需要被大量的用到,在C语言中如果不加特定的限制,它们都将存在于全局域中,若以后开发大型项目,每个人都难免会使用相同的名字的变量和函数,C++为了解决这个痛点,引入了命名空间这个概念,可以将我们自己编写的变量和函数统一放到自己的空间中,为后续的移植提供了很大的便利。

1.2 命名空间的定义

1.使用 namespace + 名称 {} 定义最基本的命名空间(既可以定义 变量 也可以定义 函数 )

namespace My_space
{
	int _a = 0;

	void space()
	{
		cout << "this is my space" << endl;
	}
}

2.命名空间也可以嵌套定义

namespace Your_space
{
	int _b = 0;

	void your_space()
	{
		cout << "this is your_space" << endl;
	}

	namespace Space
	{
		void space()
		{
			cout << "this is space" << endl;
		}
	}
}
1.3 命名空间的使用

命名空间名称加作用域解析符( :: )

int main()
{
	My_space::my_space();
	
	return 0;
}

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

using My_space::my_space;

int main()
{
	my_space();
	
	return 0;
}
1.4 注意事项

不建议直接使用 using namespace 名称; 将命名空间全部展开,有可能带来麻烦!

using namespace My_space;

int main()
{
	my_space();
	
	return 0;
}

2.缺省参数 2.1 缺省参数的概念

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

代码示例:

#include
using namespace std;

void fun(int a = 10, int b = 20)
{
	int val = a + b;
	cout << "val = " << val << endl;
}
int main()
{
	fun();
	fun(20, 30);
	return 0;
}

2.2 缺省参数的分类

全缺省参数:不需要传任何参数即可调用的函数

#include
using namespace std;

void fun(int a = 10,int b = 20,int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}
int main()
{
	fun();
	return 0;
}

半缺省参数:必须传参数才能调用,且必须是从后向前缺省

#include
using namespace std;

void fun(int a, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}
int main()
{
	fun(90);
	return 0;
}

2.3 缺省参数的注意事项

1.因为实参是从右往左传所以半缺省参数可以省略左边,不能省略右边,不能间隔给
2.缺省参数不能在函数声明和定义中同时出现
3.缺省值必须是常量或者全局变量
4.C语言不支持缺省(编译器不支持)


3.函数重载 3.1 C++为什么支持函数重载

1.C语言没法支持重载是因为同名函数没办法区分,C语言在编译后,只对函数名前面加个_,所以没法区分同名函数
2.C++是通过函数修饰规则来区分函数,只要参数不同,修饰出来的名字就不一样,就支持重载

3.2 什么是函数重载

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据不同的问题
1.函数参数个数不同
2.函数参数类型不同
3.函数参数顺序不同
4.不能依靠返回值不同

#include
using namespace std;

void fun(int a,int b)
{
	cout << "这是" << a << "和" << b << endl;
}
void fun(int a, int b,int c)
{
	cout << "这是" << a << "和" << b <<"和"<
	cout << "这是" << a << "和" << b << endl;
}
void fun(int a,double b)
{
	cout << "这是" << a << "和" << b << endl;
}
int main()
{
	fun(3, 8);
	fun(2, 3, 4);
	fun(1.3, 9);
	fun(2, 3.2);
	return 0;
}

3.3 extern “C”

在函数前加extern “C”,意思是告诉编译器将该函数按照C语言的规则来编译

#include
using namespace std;


extern "C" void test(int a, double b)
{
	printf("这是%d和%lfn", a, b);
}
int main()
{
	test(2, 3.2);
	return 0;
}

如下代码会提示错误:

做个小测试来检验一下自己掌握的到底怎么样吧:

下面的代码能构成函数重载吗?

#include
using namespace std;


void TestFunc(int a = 10)
{
	cout << "void TestFunc(int)" << endl;
}
void TestFunc(int a)
{
	cout << "void TestFunc(int)" << endl;
}
int main()
{
	TestFunc(30);
	TestFunc();
	return 0;
}

如上函数TestFunc(30)在调用的时候给我们的感觉是在调用第二个函数,函数TestFunc()给我们的感觉是在调用第一个函数,,但是,在编译的时候缺省参数并不会影响函数的名字,所以,上面两个函数编译后的函数名是一样的,计算机并不知道调用的是哪个函数,所以上面两个函数不会形成函数重载。

总结:函数重载只和参数的类型,顺序、数量有关系,不能将函数重载和缺省参数混起来,函数重载的原因是符号表中函数的修饰名不同,在最后的链接过程中才可以对号入座。

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

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

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