C/C++基础知识复习(36)

  • 函数重载是指在同一作用域内,定义多个同名但参数列表不同的函数。通过函数重载,程序员可以使用相同的函数名称处理不同类型或数量的参数,而不需要为每种情况创建不同的函数名称。编译器根据函数调用时传递的参数类型和数量来决定调用哪个版本的函数。

    函数重载的主要特性是:

    • 函数名称相同。
    • 函数的参数类型、数量或者顺序不同。
    • 返回类型不同并不能单独作为函数重载的依据。

    示例(C++ 语言):

    cpp 复制代码
    class Example { 
        public: void print(int i) { 
            std::cout << "整数: " << i << std::endl; 
        } 
        void print(double d) { 
            std::cout << "浮点数: " << d << std::endl; 
        } 
        void print(const std::string& s) { 
            std::cout << "字符串: " << s << std::endl; 
        } 
    };

    在这个例子中,print 函数被重载了三次,分别接收整数、浮点数和字符串类型的参数。

  • 函数重载的实现原理:

    函数重载的实现原理依赖于编译时的名称修饰(Name Mangling)。编译器在编译时会根据函数的名称、参数类型、参数数量以及参数的顺序等信息,自动生成一个唯一的符号(名称修饰),用于区分不同的重载版本。

    • 在 C++ 等语言中,编译器会为每个函数重载版本生成不同的名称。例如,print(int) 可能会被编译器转换为 print_int,print(double) 转换为 print_double,以此类推。这样,在链接阶段,编译器就能根据具体的调用参数选择正确的函数版本。

    • 在函数调用时,编译器会通过分析函数参数的类型、数量等信息来匹配最合适的重载版本。如果参数类型不完全匹配,编译器还会进行类型转换(如自动将整数转换为浮点数),选择最合适的重载版本。

    注意:虽然函数的返回类型不同可以作为区分,但单纯通过返回类型是无法实现函数重载的,因为返回类型不会影响编译器选择函数版本的规则。

    例如:

    cpp 复制代码
    int add(int a, int b) { 
        return a + b; 
    } 
    double add(double a, double b) { 
        return a + b; 
    }

    在这个例子中,两个 add 函数通过参数类型不同来区分。

相关推荐
BaiPeter22 分钟前
ZPL文件预览
开发语言·c++
心仪久了会沦陷2 小时前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法
悠仁さん3 小时前
【C++】哈希表
c++·算法·散列表
Severus_black5 小时前
【C++初阶】list使用及相关实现,思路顺滑流畅!
c语言·数据结构·c++·stl·list
敲上瘾7 小时前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
旖旎夜光8 小时前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
希和20279 小时前
C语言程序设计题|有序数组插入数字冒泡排序
c语言·数据结构·算法
旖旎夜光9 小时前
【C++ 基础入门】C++多态(下):单/多继承虚表、多态补充与 21 道高频题
开发语言·c++·笔记·学习
apcipot_rain19 小时前
C++转Java日记(03)
java·开发语言·c++
布莱克60520 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map