广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++之函数的重载
  • 743
分享到

C++之函数的重载

2024-04-02 19:04:59 743人浏览 安东尼
摘要

目录一、c++ 函数重载1.重载规则2.匹配原则3.重载底层实现4.extern “C”总结一、C++ 函数重载 C++ 致力于简化编程,能过函数重名来达到简化编程的目的 1.重载规

一、C++ 函数重载

C++ 致力于简化编程,能过函数重名来达到简化编程的目的

1.重载规则

1.函数名相同

2.参数的个数不同,类型不同,顺序不同,都可以构成重载

3.返回值类型必须相同,不同则不可以构成重载

例如:


void func(int a); //ok
void func(char a); //ok
void func(char a,int b); //ok
void func(int a, char b); //ok
char func(int a); //与第一个函数有冲突

2.匹配原则

1.严格匹配,找到则调用

2.通过隐式转换寻求一个匹配,找到则调用


#include <iOStream>
#include <iomanip>
using namespace std;
void print(double a){
	cout<<a<<endl;
}
void print(int a){
	cout<<a<<endl;
}
int main(){
	print(1); // print(int)
	print(1.1); // print(double)
	print('a'); // print(int)
	print(1.11f); // print(double)
	return 0;
}

输出结果

C++ 允许,int 到 long 、double,double 到 int 、float 隐式类型转换。遇到这种情型,则会引起二义性

例:将上题上的 print(int a)中的类型 int 改为double


rror: call of overloaded 'print(int)' is ambiguous
print(1); // print(int)
error: call of overloaded 'print(char)' is ambiguous
print('a'); 

解决方法,在调用时强转

3.重载底层实现

C++利用 name mangling(倾轧)技术,来改名函数名,区分参数不同的同名函数。

实现原理:用 v-c-i-f-l-d 表示 void char int float long double 及其引用。


void func(char a); // func_c(char a)
void func(char a, int b, double c);//func_cid(char a, int b, double c)

4.extern “C”

name mangling 发生在两个阶段,.cpp 编译阶段,和.h 的声明阶段。

只有两个阶段同时进行,才能匹配调用。

mystring.h


extern "C"{
	int myStrlen(char *str);
}

mystring.cpp


#include "mystring.h"
int myStrlen(char *str)
{
	int len = 0;
	while(*str++)
	len++;
	return len;
}

main.cpp


#include <iostream>
#include "mystring.h"
using namespace std;
int main()
{
	char *p = "china";
	int len;
	len = myStrlen(p);
	return 0;
}

C++ 完全兼容 c 语言,那就面临着,完全兼容 c 的类库。由.c 文件的类库文件中函数名,并没有发生 name mangling 行为,而我们在包含.c 文件所对应的.h 文件时,.h 文件要发生name manling 行为,因而会发生在链接的时候的错误。C++为了避免上述错误的发生,重载了关键字 extern。只需在要避免 name manling的函数前,加 extern “C” 如有多个,则 extern “C”{}

总结

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

--结束END--

本文标题: C++之函数的重载

本文链接: https://www.lsjlt.com/news/156007.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++之函数的重载
    目录一、C++ 函数重载1.重载规则2.匹配原则3.重载底层实现4.extern “C”总结一、C++ 函数重载 C++ 致力于简化编程,能过函数重名来达到简化编程的目的 1.重载规...
    99+
    2022-11-12
  • C++重载的奥义之函数重载详解
    目录一、基本定义        二、应用举例        三、非函数重载的情况四、函数重载的使用原则...
    99+
    2023-05-16
    C++ 函数重载 C++ 函数 C++ 重载
  • c++核心编程之函数的重载
    目录1.函数重载概述2.函数重载的注意事项1.函数重载概述 ​作用​:函数可以相同,提高复用性 ​函数重载必须满足的条件​: 1​.同一个作用域下​2.​函数名称相同​3.函数​参...
    99+
    2022-11-13
  • C++入门语法之函数重载详解
    目录写在前面1 函数重载的概念2 函数重载原理总结写在前面 关于C语言的编译与链接不懂的可以看一下下面的文章,先回顾一下以前的知识。 详解C语言的编译与链接 1 函数重载的概念 函数...
    99+
    2022-11-13
  • C++初阶教程之缺省参数与函数重载
    目录一.缺省参数1.概念2.分类3.注意二.函数重载1.概念2.C++支持函数重载的原理Linux的修饰规则总结一.缺省参数 C++祖师爷在用C写代码的时候,就觉得有些地方用着很不方...
    99+
    2023-05-17
    c++ 缺省参数 c++ 函数重载 c++缺省值怎么设置
  • 关于C++的重载运算符和重载函数
    目录C++重载运算符和重载函数C++ 中的函数重载C++ 中的运算符重载可重载运算符/不可重载运算符C++重载运算符和重载函数 C++ 允许在同一作用域中的某个函数和运算符指定多个定...
    99+
    2023-05-19
    C++重载运算符 C++重载函数
  • C++中函数重载详解
    目录函数重载的概念函数重载的应用 为什么C++支持函数重载,而C语言不支持函数重载的概念 函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函...
    99+
    2022-11-13
  • C++ 函数重载背后的原理
    目录一、函数重载二、函数重载的原理三、为何C++可以支持重载1.程序的编译链接四、C语言为何不支持重载1.C++为何可以支持函数重载五、C++和C语言相互调用1.创建静态库2.C++...
    99+
    2022-11-13
  • c++函数的重载怎么实现
    这篇文章主要讲解了“c++函数的重载怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c++函数的重载怎么实现”吧!1.函数重载概述作用:函数可以相同,提高复用性函数重载必须满足的条件:...
    99+
    2023-06-29
  • 详解C++函数类型与重载函数
    目录1.首先对重载函数,明确函数的返回类型不能决定重载函数的类别,即2.注意形参列表中的默认值,使用含默认参数的重载函数时可能会产生二义性。例:问题:总结 1.首先对重载函数,明确函...
    99+
    2022-11-12
  • C++深入讲解函数重载
    目录函数重载概念重载依据值型别判断函数重载的规则名字粉碎-名字修饰函数重载 概念 在C++中可以为两个或者两个以上函数提供相同的函数名称,只要参数类型不同,或者参数数目不同,参数顺序...
    99+
    2022-11-13
  • C++ 函数重载详情介绍
    文章转自微信公众号:Coder梁(ID:Coder_LT) 函数重载 函数重载还有一个别名叫函数多态,其实我个人感觉函数多态这个名字更好理解更恰当一些。 函数多态是C++在C语言基础...
    99+
    2022-11-12
  • C++如何实现函数重载
    这篇文章给大家分享的是有关C++如何实现函数重载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。函数重载函数重载还有一个别名叫函数多态,其实我个人感觉函数多态这个名字更好理解更恰当一些。函数多态是C++在C语言基础...
    99+
    2023-06-25
  • C++中怎么进行函数重载
    今天就跟大家聊聊有关C++中怎么进行函数重载,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。函数重载要求编译器能够***地确定调用一个函数时应执行哪个函数代码,即采用哪个函数实现。确定...
    99+
    2023-06-17
  • C++超详细讲解函数重载
    目录1 函数重载的定义2 构成函数重载的条件3 编译器调用重载函数的准则4 函数重载的注意事项4.1 避开重载带有指定默认值参数的函数4.2 注意函数重载遇上函数指针4.3 C++编...
    99+
    2022-11-13
  • 怎么使用C++函数类型与重载函数
    本篇内容介绍了“怎么使用C++函数类型与重载函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.首先对重载函数,明确函数的返回类型不能决定...
    99+
    2023-06-25
  • C++作用域与函数重载的实现
    目录1、作用域1.1 作用域的作用1.2 作用域的分类1.3 static 、const2、 域作用限定符2.1 空间域的命名2.2 指定空间访问2.3 全局展开3、函数重载3.1 ...
    99+
    2023-02-03
    C++作用域 C++函数重载
  • C++函数重载的细节图文详解
    前言:如果不想看论证,可以直接点击总结,跳转到最后 1、使用重载函数时,如果数据类型不匹配,C++尝试使用类型转换与形参进行匹配,如果转换后有多个函数能匹配上,编译器将报错; 论证如...
    99+
    2022-12-10
    c++函数重载例子 C++函数重载是什么 重载函数怎么写
  • C++重载的奥义之运算符重载详解
    目录0、引言1、运算符重载定义2、作为成员函数进行重载3、作为全局函数进行重载4、运算符重载的一些规则0、引言 重载,顾名思义从字面上理解就是重复装载,打一个不恰当的比方,你可以用一...
    99+
    2023-05-16
    C++ 运算符重载 C++ 运算符 C++ 重载
  • C++深入分析回顾函数重载
    目录一、函数重载回顾二、类中的重载三、重载的意义四、小结一、函数重载回顾 函数重载的本质为相互独立的不同函数C++ 中通过函数名和函数参数确定函数调用无法直接通过函数名得到重载函数的...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作