C++函数重载的定义与原因详解

 更新时间:2022年03月07日 16:13:07   作者:New Youg  
这篇文章主要为大家详细介绍了Python实现学生成绩管理系统,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

引例

如果要求你只能通过print函数,即能打印字符串,又能打印一个整型。

虽然在C语言中我们可以通过 print_i 和print_s来实现功能。

但是C++更方便。C++支持同一函数名,完成类似的功能的语法。

void print(int i)
{
    cout << "print a integer :" << i << endl;
}

void print(string str)
{
    cout << "print a string :" << str << endl;
}

int main()
{
    print(12);
    print("hello world!");
    return 0;
}

函数重载的定义

函数重载是指在同一作用域内(可以浅显理解为同一文件内,毕竟函数具有外联系),可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处.

函数重载规则

函数重载的条件:参数个数 或 类型 或 顺序必须不同,函数名不看

image-20220305195013276

为什么C不支持函数重载而C++可以

要想达到函数重载必然解决:函数命名问题 —编译器只需要将用户定义的各种标识符,再加载内存中,对其进行修饰即----内部名称

因为如果不解决函数命名问题,在编译时,就无法形成符号表,同时在链接阶段时,汇总符号表也成问题,毕竟符号表决定了,程序到达调用哪个函数。

image-20220305203830636

内部名称

  • 内部名称:C和C++的语言实现都会按照特定规则,将定义的标识符(各种变量名,函数名,类型,命名空间等)转换为对应的内部名称.通过内部名称编译器就可以识别各种标识符.
  • 对于C,仅在标识符加上前缀‘``_`’即swap()》》_swap()
  • 如果从唯一识别函数作用来看,这种规则没有任何用:毕竟除了static和命名空间域里面的函数,函数都具有外联性,一但在不同文件出现同名函数,程序就CREASH。
  • 对于C++,不同编译器下是不同的:

LINUX:

image-20220305195644165

window:

image-20220305195840804

正是通过这种内部命名规则,函数重载成为可能。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!     

相关文章

  • C++11运算符重载和向量类重载实例详解(<<,>>,+,-,*等)

    C++11运算符重载和向量类重载实例详解(<<,>>,+,-,*等)

    这篇文章主要给大家介绍了关于C++11运算符重载和向量类重载的相关资料,主要包括<<,>>,+,-,*等,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • C语言练习题:求1到10的阶乘之和简单实例

    C语言练习题:求1到10的阶乘之和简单实例

    下面小编就为大家带来一篇C语言练习题:求1到10的阶乘之和简单实例。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 使用C语言实现从avi视频中提取图片

    使用C语言实现从avi视频中提取图片

    这篇文章主要为大家详细介绍了如何使用C语言实现从avi视频中提取图片,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考下
    2023-10-10
  • 详解C++中StringBuilder类的实现及其性能优化

    详解C++中StringBuilder类的实现及其性能优化

    在Java和C#中,StringBuilder可以创造可变字符序列来动态地扩充字符串,那么在C++中我们同样也可以实现一个StringBuilder并且用来提升性能,下面就来详解C++中StringBuilder类的实现及其性能优化
    2016-05-05
  • 关闭显示器软件代码分享

    关闭显示器软件代码分享

    这篇文章主要介绍了使用程序如何关闭显示器的代码,需要的朋友可以参考下
    2014-01-01
  • C语言实现链队列

    C语言实现链队列

    这篇文章主要为大家详细介绍了C语言实现链队列,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • C++11中union的使用方法示例

    C++11中union的使用方法示例

    这篇文章主要给大家介绍了关于C++11中union的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • C语言二叉树层序遍历

    C语言二叉树层序遍历

    这篇文章主要介绍了C语言二叉树层序遍历,文章基于C语言的相关资料展开详细的文章内容,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-04-04
  • c++ 函数指针相关总结

    c++ 函数指针相关总结

    这篇文章主要介绍了c++ 函数指针的相关资料,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下
    2021-02-02
  • C++ 函数指针的实现

    C++ 函数指针的实现

    本文主要介绍了C++ 函数指针的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02

最新评论