代码编织梦想

一.什么是函数重载

在我们用C语言平时写代码,需要使用功能类似,但细节不同的函数时,需要使用不同的函数名来构建函数,不利于代码可读性,C++很好的解决了这个问题,在C++中,我们可以使用一个函数名来定义多个函数,这就是函数重载。

#include<iostream>
using namespace std;

//声明
void func(int x);
void func(char x);
void func(double x);

int main()
{
	func(1);
	func('a');
	func(2.2);
}

//定义
void func(int x)
{
	cout << "int" << endl;
}
void func(char x)
{
	cout << "char" << endl;
}
void func(double x)
{
	cout << "double" << endl;
}

运行上面的代码我们可以得到如下图的结果,使用同一个函数名,却调用了不同的函数。在这里插入图片描述

二.函数重载的规则

那么除了不同的类型之外,还有其他的方式构成函数重载吗?答案是当然。这就涉及到函数重载的规则。
1.函数名称必须相同。
2.参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
3.函数的返回类型可以相同也可以不相同。
4.仅仅返回类型不同不足以成为函数的重载。

三.为什么C++可以,而C不行

使用Linux来获得如下程序编译后的文件
在这里插入图片描述
得到的编译后的文件如下:
c
在这里插入图片描述
c++
在这里插入图片描述
从两个被编译后的文件可以看到,编译C后,函数名被编译成<.funci>,而在编译C++后被编译成<_Z4funci>与<_Z4funcid>,由此可以看出,编译C语言时,函数名没有变化,而C++在函数名前多了Z4,函数名后多了i或者id。
Z4是函数名的位数,i和id则是参数类型int和double的缩写,所以C++中的函数在编译后可以根据函数名和参数类型顺序判断需要调用的函数是哪个,而C只能判断函数名,从而无法进行函数重载。
规则中,仅仅返回类型不同不足以成为函数的重载也是同样的道理,函数的返回值在编译后不会在函数名中体现,从而无法找到对应返回类型的函数,无法函数重载。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dbs2875337793/article/details/132928243

【c++】详解std::mutex-爱代码爱编程

2023年9月11日,周一中午开始 2023年9月11日,周一晚上23:25写完 目录 概述头文件std::mutex类的成员类型方法没有std::mutex会产生什么问题问题一:数据竞争问题二:不一致lock和unlock死锁 概述 std::mutex是C++标准库中提供的一种同步原语,用于保护共享资源的访问。 std::mut

c++day4-爱代码爱编程

1、仿照string类,完成myString 类 #include <iostream> #include <cstring> using namespace std; class myString { private: char *str; //记录c风格的字符串 in

[网鼎杯 2020 朱雀组]phpweb call-爱代码爱编程

时间一跳一跳的 抓个包 很奇怪 结合上面的 date() 认为第一个是函数 我们随便输一个看看 发现过滤了 随便输一个 linux指令 发现报错了 call_user_func() 看看是啥 很容易理解 第一个参数是函数名 后面是 参数 那么这里就是 func 函数  p 数值 所以我们看看有什么办法可以 我们尝试读

leetcode每日一题:1462. 课程表 iv(2023.9.12 c++)-爱代码爱编程

目录 1462. 课程表 IV 题目描述: 实现代码与解析: 拓扑排序 原理思路: 1462. 课程表 IV 题目描述:         你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] = [ai, bi]

c++day5-爱代码爱编程

实现一个图形类(Shape),包含受保护成员属性:周长、面积, 公共成员函数:特殊成员函数书写 定义一个圆形类(Circle),继承自图形类,包含私有属性:半径 公共成员函数:特殊成员函数、以及获取周长、获取面积函数 定义一个矩形类(Rect),继承自图形类,包含私有属性:长度、宽度 公共成员函数:特殊成员函数、以及获取周长、获取面积函数

【c++】函数的设计与使用(三)重载函数、模板函数-爱代码爱编程

重载函数 参数列表不相同,可能是参数类型不相同(或者参数个数不相同,都不相同,也可以)的两个或多个函数,可以拥有相同的函数名称;编译器会把实参和每个重载函数的形参比对,找出哪个重载函数合适,所以每个重载函数的参数列表必须和

c运行时库- crt(c runtime)-爱代码爱编程

CRT(C Runtime)是指C运行时库,它为C和C++程序提供了一组初始化和终止程序的基本构建块。这些构建块确保在main()函数执行之前和之后进行适当的初始化和清理。 CRT的主要任务包括: 初始化静态数据:分配和

c++day6实现成模板类-爱代码爱编程

1> 自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量 成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 #include <iostream> using namespace std; template <typename T> class Sta

c++位图-爱代码爱编程

一、前提引入 思考如何实现下面的题目  给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在 这40亿个数中。【腾讯】 一个整型数据int为4个字节,计算得 ,大约需要16G的存储空间。如果采用遍历判断的话,时间复杂度为O(N)较高,并且不利于多次反复判断 如果采用二分查找,需要先排序再查找时间复杂度为O(l

c++中函数原型和函数定义-爱代码爱编程

C++中函数原型和函数定义 C++函数原型指的是函数声明的语法形式,它告诉编译器函数的名称、返回类型和参数列表。函数原型的语法形式如下: return_type function_name(parameter_list)

c【文件操作】-爱代码爱编程

1. 什么是文件 磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。 1.1 程序文件 包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境 后缀为.exe)。 1.2 数据文件 文件的内容不一定是程序,而是程序

【c++-爱代码爱编程

内联 在频繁调用一个函数时,会建立栈帧,如何减少内存的消耗 int add(int x,int y) { return (x+y)*10; } c语言中,用宏函数 #define add(x,y) (((x)+(y))*10) 若不加括号会出现一些问题 宏优势 不需要建立栈帧,提高调用效率,可复用和修改 缺点 易出错 复杂 可读性差 不能调试

c++:类的六个默认成员函数-爱代码爱编程

文章目录 前言一、构造函数概念特性 二、析构函数概念特性 三、拷贝构造函数概念特性 四、赋值运算符重载运算符重载赋值运算符重载 五、取地址及const取地址操作符重载const成员取地址