一、为什么C语言不支持函数重载而c++能支持

什么是函数重载?为什么C语言不支持函数重载,而c++能支持函数重载?

解析:

  函数重载是用来描述同名函数具有相同或者相似的功能,但数据类型或者是参数不同的函数管理操作。在C语言里需要写两个不同名称的函数来进行区分。

    #include <iostream>  using namespace std;  class Test  {  public:  int add(int x, int y)           //相加,传入参数以及返回值都是int  {  return x+y;  }  float add(float x, float y)     //相加,传入参数以及返回值都是float  {  return x+y;  }  };  int add(int x, int y)               //相加,传入参数以及返回值都是int  {  return x+y;  }  float add(float x, float y)         //相加,传入参数以及返回值都是float  {  return x+y;  }  int main()  {  int i = add(1, 2);  float f = add(1.1f, 2.2f);  Test test;  int i1 = test.add(3, 4);  float f1 = test.add(3.3f, 4.4f);  cout<<"i = "<<i<<endl;  cout<<"f = "<<f<<endl;  cout<<"i1 = "<<i1<<endl;  cout<<"f1 = "<<f1<<endl;  return 0;  }  

上面的程序中使用了全局函数和类成员函数的重载,代码30~39行是对它们的调用与测试。可以看到,在c++中可以根据传入参数类型和返回类型来区分不同的重载函数。

  C语言不支持函数重载,c++却支持,为什么呢?这是因为c++的重载函数经过编译器处理之后,两个函数的符号是不相同的。例如代码第18行的add函数,经过处理后变成了_int_add_int_int之类,而后者变成了_float_add_float_float之类。这样的名字包含了函数名、函数参数数量及返回类型信息,c++就是靠这种机制来实现函数重载的。

总结:

  函数重载是用来描述同名函数具有相同或者相似的功能,但数据类型或者是参数不同的函数管理操作。

  函数名经过c++编译器处理后包含了原函数名、函数参数数量及返回类型信息,而C语言不会对函数进行处理。

    (A) int calc(int, int);  int cale(const int, const int);  (B) int get();  double get();  (C) int *reset(int*);  double *reset(double*);  (D) extern "C" int compute(int *, int);  extern "C" double compute(double*, double);  

A错误。第二个函数被视为重复声明,第二个声明中的const修饰词会被忽略。

B错误。第二个声明是错误的,因为单就函数的返回值而言,不足以区分两个函数的重载。

C正确。这是合法的声明,reset()函数被重载。

D错误。第二个函数声明是错误的,因为在一组重载函数中,只能有一个函数被指定为extern "C"

三、重载和覆写有什么区别

  重载是指子类改写了父类的方法,覆写是指同一个函数的不同版本之间参数不同。

  重载是编写一个与已有函数同名但是参数表不同(参数数量或参数类型不同)的方法,它具有如下特征:

(1)方法名必须相同。

(2)参数列表必须不相同,与参数列表的顺序无关。

(3)返回值类型可以不相同。

  覆写是派生类重写基类的虚函数,它具有如下如示的特征。

(1)只有虚函数的抽象方法才能被覆写。

(2)相同的函数名

(3)相同的参数列表

(4)相同的返回值类型

  重载是一种语法规则,有编译器在编译阶段完成,不属于面向对象编程;而覆写是由运行阶段决定的,是面向对象编程的重要特征。

c++整理--函数重载相关推荐

  1. meo学习笔记2:函数重载(C++)

    关于C++中的函数重载问题 1.前言 重载其实在是一个很基础的概念,我们用的时候也很多,但是我老是忘记相关的约定约束,下面就自己学习的相关问题做一个整理吧,主要说明函数重载的含义.函数重载的形式等问题 ...

  2. C++基础知识 —— 内存分区模型、引用、函数重载、类和继承、this指针、友元、多态、文件操作

       参考 黑马程序员 C++课程笔记,个人理解及整理  可以使用 在线编译c++代码 来简单验证.学习代码 目录 C++核心编程 1. 内存分区模型 1.1 程序运行前 1.2 程序运行后 1.3 ...

  3. ActionScript语言函数重载

    更新:你见过JavaScript支持重载吗,规范就是这么定义的.如果不是研究Java和Flex对象的Serialization,我也不会注意它. 距离写这篇文章已有8年了,时光匆匆啊,今天整理资料时看 ...

  4. 坚持学习100天:多态(函数重载、虚函数和多态)

    前言 Hello,我是修齊. 学习C++的第一百零一十天,将近五一假期了,不浪漫亦是罪名,男生今年不能再挨批斗了,放假就得好好陪陪身边的人浪漫浪漫,生活,加油,学习加油. 在这里记录一些学习的东西和学 ...

  5. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  6. 函数重载需要注意的点

    基本概念: 作用:函数名可以相同,提高复用性 函数重载满足的条件: 1.同一作用域 2.函数名相同 3.函数参数类型不同,个数不同,顺序不同 基本规则就上面那几条,不多说了,开始难一些的东西: 1.函 ...

  7. JavaScript中实现函数重载和参数默认值

    2019独角兽企业重金招聘Python工程师标准>>> 参数默认值是指在调用函数时,若省略了某个实参,函数会自动为该参数分配一个默认值,使得函数调用的方便性和灵活性大大提高. 举个例 ...

  8. 《C++成员函数重载、覆盖与隐藏》

    <成员函数的重载.覆盖与隐藏> ------------------------------------------------------------------------------ ...

  9. 函数重载(overload)

    函数重载(overload) 先看一个例子 #include<iostream> using namespace std; //计算两个参数a,b的乘积的函数 int multiply(i ...

最新文章

  1. 【Go语言】【12】GO语言的结构体
  2. 使用git提交到github,每次都要输入用户名和密码的解决方法
  3. (1)Hadoop 的第一个程序 WordCount 理解
  4. Java Date Time 教程-时间测量
  5. VC中对CString 的读写(ini文件)
  6. ios 扫码枪外设 键盘模式_多平台连接:雷柏XK100蓝牙键盘评测
  7. MindManager中读图工具的使用
  8. 【2019南昌邀请赛网络赛I:】Max Answer(st表+单调栈(新模版)+分析)
  9. FX5 C的编程语言,三菱FX5-C32EX/D手册FX5-C32EX/D编程手册 - 广州凌控
  10. 怎么利用计算机求一元三次方程,一元三次方程怎么快速把解求出来?
  11. python保存快捷键是什么_python中的快捷键
  12. Java每日算法--罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
  13. PS软件学习知识盘点
  14. MacBook Pro win7系统下使用 苹果鼠标 apple mouse
  15. 自媒体:公众号内容可以同步到头条吗
  16. html扇形展开,css如何画扇形?
  17. ITN网络课程笔记(十七)(完)
  18. CPU是计算机的大脑英语,走进PC的大脑:CPU知识全面剖析
  19. 蓝桥杯官网python组基础练习-基础1-5
  20. Matplotlib进阶教程:颜色讲解

热门文章

  1. 免费SSL证书(支持1.0、1.1、1.2)
  2. Why does pthread_cond_signal not work?【转】
  3. [原创]windows server 2012 AD架构试验系列 – 12 配置操作主机
  4. XenDesktop 5 SQL Server Mirror事务日志比较大的原因分析
  5. NFS无法启动根文件系统的解决
  6. Windows 任务栏缩略图自定义程序[更新 Build20100830]
  7. 服务器内存延迟,内存带宽、延迟性能测试
  8. android暂停活动,如何将Android暂停活动带到前面
  9. gitlab修改用户密码_CRM用户模块(用户密码修改)
  10. 清华大学《操作系统》(二十三):I/O子系统