C++函数重载,名字间空域

一、什么是函数重载呢?

比如我们要实现一个swap函数

 

int swap(int* x, int* y)
{
      int tmp = *x;
      *x = *y;
      *y = tmp;
}

但是这个函数只能实现俩个整形的交换,我们想要实现俩个char类型的交换,就要使用下面这个函数

 

 

void Swap(char* x ,char* y);

以上俩个函数即构成重载;

函数重载方便我们将函数的名字统一起来,用户可以通过这个函数名调用不同类型的同名函数,而程序员也不需要记更多的函数名。

 

二、函数重载的基本概念:

1. 在同一作用域内;

2. 函数名相同

3. 参数列表不同(参数类型不同,参数个数不同,参数的顺序不同)

注:1 .俩个函数构成重载,与返回值类型无关

       2. c语言不支持函数重载,c++支持

 

三、为什么c++支持重载,而C语言不支持重载呢 ?

答:这与函数在编译过程中的命名规则有关

c语言:编译时编译器对函数名的修改规则是:在名字前面加_

eg : void  Swap (int* x , int*  y);   ——改为  _Swap

      void Swap (char* x, char*  y); ——改为 _Swap

 

c++中:函数的命名规则   ?+函数名+@@YA+参数列表+@Z

 

 eg:void  Swap (int* x , int*  y);   ——改为   ?Swap@@YAXHH@Z

        void  Swap (char* x , cahr*  y);   ——改为   ?Swap@@YAXDD@Z

X-void    D - char   F - short  H - int    J-long

所以编译器认为他们的函数名是不一样的,故可以重载

 

四、为什么在c++中调用c语言的函数要用 extern”c“?

因为在编译期间,c和c++编译器对函数进行重命名,且命名规则不同,使用extern ”c“的方式在C++程序中声明c语言文件中的函数,可以在编译时告诉编译器使用c语言是规则对该函数进行命名。这样在链接的时候就可以顺利的在.c文件中找到该函数

 

五、名字空间域

名字空间域是标准c++中进入的,他解决了全局命名的冲突;在c++中,变量,函数,类都是大量存在的,如果这些函数,变量,类的名字都存在与全局命名空间中,很可能会导致一些冲突,所以我们引入了名字空间域。它是我们的名字都本地化,避免命名冲突或名字污染

 

1、形式:

1).以namespace关键字开头   

2) 域名

3) 用花括号括起来内容

4)可以使用 using namespace 域名    /  域名 : : 变量名(函数)的方式使用域内成员

namespace  Name1
{
     int a = 0;
}
namespace  Name2
{
     int a = 1;
}

Name1::a = 10;
Name2::a = 20;

2、名字空间域可以镶嵌使用

3、同一名字空间域可以放在不同的文件下,编译器在编译过程中会合成同一命名空间下

从本质上讲,名字空间与就是定义了一个范围,名字空间域里的任何东西都局限于该命名空间。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值