C++ 函数重载

简介: C++ 函数重载

前言

这篇文章将给大家介绍C++中的函数重载,函数重载在C++中是非常重要的一个概念希望大家能够好好理解。

一、什么是函数重载

1.用同一个函数名定义不同的函数

2.重载函数名字相同参数不同

重载函数示例:

下面三个函数构成了重载函数

int fun(void)
{
}
int fun(int a,int b)
{
}
int fun(char *s)
{
}

注意点:1.函数的返回值不作为函数重载的依据。

2.重载函数的类型不同

3.重载函数在本质上是相互独立的函数

4.函数重载是由函数名和参数列表决定的

二、编译器怎么区分不同的重载函数

#include <iostream>
using namespace std;
void fun(int i)
{
    printf("i = %d\n", i);
}
void fun(void)
{
    printf("hello world\n");
}
int main()
{
    fun(5);
    fun();
    return 0;
}

运行结果:

image.png

这个运行结果说明了编译器是能够区分出重载函数的,编译器可以通过函数的参数列表区分不同的重载函数。

三、重载函数的地址

上面我们说到重载函数的本质是不相同的函数,那么函数都不相同了地址肯定也是不同的。

重载函数无法通过函数名得到函数地址。

得到函数地址方法:使用函数指针

#include <iostream>
using namespace std;
void fun(int i)
{
  cout << i << endl;
}
void fun(void)
{
  cout << "hello" << endl;
}
int main()
{
  void (*pf)(int i) = fun;
  void (*pf1)(void) = fun;
  cout << pf << endl;
  cout << pf1 << endl;
  return 0;
}

当函数指针指向函数时,根据函数指针的类型严格寻找对应的重载函数。

总结

函数重载通过函数参数列表区分不同的同名函数,重载函数的本质是不同的函数。

相关文章
|
4月前
|
存储 安全 编译器
【C++专栏】C++入门 | 函数重载、引用、内联函数
【C++专栏】C++入门 | 函数重载、引用、内联函数
46 0
|
3月前
|
编译器 C++
C++进阶之路:何为命名空间、缺省参数与函数重载
C++进阶之路:何为命名空间、缺省参数与函数重载
30 3
|
29天前
|
编译器 程序员 C语言
C++函数重载
在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似: void swap1(int *a, int *b); //交换 int 变量的值 void swap2(float *a, float *b); //交换 float 变量的值 void swap3(char *a, char *b); //交换 char 变量的
16 4
C++函数重载
|
4月前
|
存储 安全 编译器
【C++入门】缺省参数、函数重载与引用(下)
【C++入门】缺省参数、函数重载与引用
|
29天前
|
编译器 Linux C语言
【C++小知识】为什么C语言不支持函数重载,而C++支持
【C++小知识】为什么C语言不支持函数重载,而C++支持
|
1月前
|
安全 编译器 C++
C++入门 | 函数重载、引用、内联函数
C++入门 | 函数重载、引用、内联函数
24 5
|
2月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
2月前
|
算法 编译器 C++
C++基础知识(三:哑元和内联函数和函数重载)
在C++编程中,"哑元"这个术语虽然不常用,但可以理解为在函数定义或调用中使用的没有实际功能、仅作为占位符的参数。这种做法多见于模板编程或者为了匹配函数签名等场景。例如,在实现某些通用算法时,可能需要一个特定数量的参数来满足编译器要求,即使在特定情况下某些参数并不参与计算,这些参数就可以被视为哑元。
|
4月前
|
程序员 编译器 C++
C++中的函数重载(Function Overloading)
C++中的函数重载(Function Overloading)
37 2
|
3月前
|
存储 安全 编译器
【C++】:函数重载,引用,内联函数,auto关键字,基于范围的for循环,nullptr关键字
【C++】:函数重载,引用,内联函数,auto关键字,基于范围的for循环,nullptr关键字
26 0