C++深入分析回顾函数重载

 更新时间:2022年06月01日 10:29:58   作者:清风自在 流水潺潺  
C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading),借助重载,一个函数名可以有多种用途

一、函数重载回顾

  • 函数重载的本质为相互独立的不同函数
  • C++ 中通过函数名和函数参数确定函数调用
  • 无法直接通过函数名得到重载函数的入口地址
  • 函数重载必然发生在同一个作用域中

二、类中的重载

类中的成员函数可以进行重载

  • 构造函数的重载
  • 普通成员函数的重载
  • 静态成员函数的重载

问题:全局函数,普通成员函数以及静态成员函数之间是否可以构成重载?

注意事项

  • 重载函数的本质为多个不同的函数
  • 函数名和参数列表是唯一的标识
  • 函数重载必须发生在同一个作用域中

所以类的成员函数和全局函数不能构成重载,因为全局函数位于全局的命名空间当中,而成员函数位于类里面,作用域不一样。

下面看一个重载的示例:

#include <stdio.h>
class Test
{
    int i;
public:
    Test()
    {
        printf("Test::Test()\n");
        this->i = 0;
    }
    Test(int i)
    {
        printf("Test::Test(int i)\n");
        this->i = i;
    }
    Test(const Test& obj)
    {
        printf("Test(const Test& obj)\n");
        this->i = obj.i;
    }
    static void func()
    {
        printf("void Test::func()\n");
    }
    void func(int i)
    {
        printf("void Test::func(int i), i = %d\n", i);
    }
    int getI()
    {
        return i;
    }
};
void func()
{
    printf("void func()\n");
}
void func(int i)
{
    printf("void func(int i), i = %d\n", i);
}
int main()
{
    func();
    func(1);
    Test t;        // 初始化,调用没有参数的构造函数Test(),输出Test::Test()
    Test t1(1);    // Test::Test(int i)
    Test t2(t1);   // Test(const Test& obj)
    func();        // void func()
    Test::func();  // void Test::func()
    func(2);       // void func(int i), i = 2;
    t1.func(2);    // void Test::func(int i), i = 2
    t1.func();     // void Test::func()
    return 0;
}

输出结果如下:

这个例子展示了类中函数的重载以及全局函数的重载,值得多阅读几遍!!

三、重载的意义

  • 通过函数名对函数功能进行提示
  • 通过参数列表对函数用法进行提示
  • 扩展系统中已经存在的函数功能

下面看一个字符串拷贝函数的重载:

#include <stdio.h>
#include <string.h>
char* strcpy(char* buf, const char* str, unsigned int n)
{
    return strncpy(buf, str, n);
}
int main()
{
    const char* s = "AutumnZe";
    char buf[8] = {0};
    //strcpy(buf, s);
    strcpy(buf, s, sizeof(buf)-1);
    printf("%s\n", buf);
    return 0;
}

输出结果如下:

四、小结

  • 类的成员函数之间可以进行重载
  • 重载必须发生在同一个作用域中
  • 全局函数和成员函数不能构成重载关系
  • 重载的意义在于扩展已经存在的功能

到此这篇关于C++深入分析回顾函数重载的文章就介绍到这了,更多相关C++函数重载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用C语言实现猜数字游戏

    利用C语言实现猜数字游戏

    这篇文章主要为大家详细介绍了利用C语言实现猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • QT实现简单TCP通信

    QT实现简单TCP通信

    这篇文章主要为大家详细介绍了QT实现简单的TCP通信,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C语言实现扫雷小游戏的示例代码

    C语言实现扫雷小游戏的示例代码

    这篇文中主要为大家详细介绍了如何利用C语言实现经典的扫雷小游戏。扫雷小游戏主要是利用字符数组、循环语句和函数实现,感兴趣的小伙伴可以了解一下
    2022-10-10
  • STL中的string你了解吗

    STL中的string你了解吗

    这篇文章主要为大家详细介绍了STL中的string,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Qt实现定时器的两种方法分享

    Qt实现定时器的两种方法分享

    这篇文章主要为大家详细介绍了Qt中实现定时器的两种不同方法,文中的示例代码讲解详细,对我们了解Qt有一定的帮助,感兴趣的可以跟随小编一起学习一下
    2022-11-11
  • static全局变量与普通的全局变量的区别详细解析

    static全局变量与普通的全局变量的区别详细解析

    以下是对static全局变量与普通的全局变量的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-09-09
  • C语言数据结构与算法之图的遍历(一)

    C语言数据结构与算法之图的遍历(一)

    这篇文章主要是介绍了利用深度优先算法实现图的遍历,文中利用图文详细的介绍了实现步骤,对我们学习数据结构与算法有一定的帮助,需要的朋友可以参考一下
    2021-12-12
  • IOS 开发UITextView回收或关闭键盘

    IOS 开发UITextView回收或关闭键盘

    这篇文章主要介绍了IOS 开发UITextView回收或关闭键盘的相关资料,需要的朋友可以参考下
    2017-06-06
  • Qt实现进程界面之间的鼠标焦点切换

    Qt实现进程界面之间的鼠标焦点切换

    这篇文章主要为大家详细介绍了Qt实现进程界面之间的鼠标焦点切换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09

最新评论