C++知识点---命名空间、缺省参数、重载

更多知识点请点链接:C++知识点目录索引

1.什么是C++?
  • C++延续了C语言的语法使用,在其基础上又增加了自己的特性
  • 对于C++而言,可以进行过程化的设计,也可以根据抽象数据类型的特点,将其认为是某一对象,基于这种对象进行程序设计

2. C++与C语言的差异
  • 数据类型:从基本数据类型来看,C++增加了逻辑型bool;从自定义类型来看,C++增加了类
  • 关键字:C语言的关键字只有32个,C++在此基础上将关键字增加到98个关键字
  • 命名冲突:C语言不支持全局命名冲突的情况(即重命名);C++存在名字空间域,解决了命名冲突的问题

3. C++中的命名空间
  • 以关键字namespace开始,其后接命名空间的名字
  • 命名空间相当于作用域,空间里的成员,外部访问时必须指定成员名字存在的作用域中(即命名空间)
  • ::是作用域解析符,某成员名字属于哪个作用域;下面的例子中 s1::a;表示a在s1的作用域里

例:

namespace s1
{
    int a = 10;
}

namespace s2
{
    int a = 20;
}
int main()
{
    cout << s1::a << endl;
    cout << s2::a << endl;
    system("pause");
    return 0;
}

4.缺省参数
  • 理解:缺省参数指可给函数参数赋值,留做备用,当调用函数时,没有传参时即可使用设置的参数缺省值
  • 规则:设置缺省值的参数只能是最后的几个参数。也就是说某一个参数一旦设置了缺省值,其后而的参数也必须设置缺省值。

    例:

int Add1(int x, int y, int z)//没有缺省值
{
    return x + y + z;
}

int Add2(int x, int y, int z = 3)//半缺省
{
    return x + y + z;
}
int Add3(int x = 1, int y = 2, int z = 3)//全缺省
{
    return x + y + z;
}
int Add4(int x, int y = 2, int z)//错误
{
    return x + y + z;
}
int main()
{
    cout << Add1(3,6,9) << endl;
    cout << Add2(6,7) << endl;
    cout << Add3() << endl;
    system("pause");
    return 0;
}

5.函数重载

5.1 什么是函数重载

在同一作用域内,一组函数的函数名相同参数列表不同(个数不同/类型不同),返回值可同可不同

例如:
void Func1(int a);
void Func1(int a,double c);
int Func1(double c,int a);
这几个函数即为函数重载;和返回值无关,函数名相同,对应参数不同,参数个数也不相同

5.2 为什么需要函数重载

根据函数重载的定义可从函数重载的几个特点来分析:

  • 函数名相同:在C语言的语法中,同一作用域中不允许函数名重复,那么在实现一个功能时就需要定义多个函数,例如:1+2,1+2+3,1.0+2.0+3.0+4.0,虽然这些加法只是个数不同,类型不同,但在调用函数就不能使用同一函数名,因此为了减少工作量,引入函数重载可解决这一问题
  • 参数不同:上面的例子只是参数列表(类型,个数)不同,故相同功能的函数只需要设计不同的参数即可

    几个例子

  int Add(int x, int y)
{
    return x + y;
}

double Add(double x, double y)
{
    return x + y;
}

int Add(int x, int y, double z)
{
    return x + y + z;
}
int main()
{
    cout << Add(1, 2) << endl;
    cout << Add(3.0, 4.0) << endl;
    cout << Add(1, 2,3.0) << endl;

    system("pause");
    return 0;
}

结果:

这里写图片描述

分析:
上述例子中存在函数重载,几个Add函数实现相同的功能,不会发生命名重复等诸多情况,都能得到相应的结果

5.3 C++支持重载的原因

在说明这个问题之前,我们在linux下查看同一段代码分别用C语言编译和C++编译时的汇编代码

代码:

#include<stdio.h>

int Add(int x,int y)
{
    return x+y;
}

int main()
{
    int ret=Add(1,2);
    printf("%d",ret);
    return 0;
}

C语言:

这里写图片描述

C++:

这里写图片描述

分析:

  1. 从上图中可以看出,C++在调用函数时Add函数名已经改变<_Z3Addii>, 不仅仅是函数名,还有参数的类型,而C语言调用时Add函数名< Add >没有改变
  2. C语言中一个函数就是一个地址,即使参数不同,也是相同的地址,编译器不能识别,故而C语言中没有重载函数的概念
  3. C++中一个函数名可有多个地址,当参数不同时,地址也不相同,编译器可根据不同的地址去调用对应的函数来完成函数的功能,因此C++中支持函数重载的概念

    综上所述:C++能够支持重载是因为他有自己的函数名修饰规则,在编译时可以识别相同函数名,不同参数列表的函数

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值