首页 > 编程语言 >C++中的函数重载(C++Primer)

C++中的函数重载(C++Primer)

时间:2023-12-06 23:00:53浏览次数:48  
标签:const 函数 形参 int void C++ 重载 Primer

一、什么是函数的重载

在同一作用域下,几个函数的函数名相同,但其内部的形参列表不同,我们称之为函数的重载,这里的不同不仅仅指形参数量的不同,还包括形参类型的不同。

void print(const char *const_p);
void print(const char *begin,const char *end);
void print(const int *const_p);//这里的三个函数分别演示了函数重载的几种形式

注意:main函数不可以重载

原因如下:

C++中规定,main函数作为函数的入口,且规定只有两种main函数的签名合法:int main(); 和 int main(int argc,char* argv[]);其他的任何对main函数的签名都是不合法的。

二、如何定义重载函数

根据重载函数的定义,我们要保证函数名相同,并保证函数内部的形参列表不同。

void show(int a,int b,double c=10);
void show(int a,double b);
void show(int a);

三个函数名相同,但每个函数的形参列表不同,这就是一种函数的重载。

三、判断两个形参的类型是否相异(即判断函数是否属于重载函数)

引用类型的重载函数

void show(const int&);
void show(const int& a);//这两个函数是一个类型的形参列表,不属于重载函数

//当用typedef定义类型别名时,依然不属于重载函数
typedef A B;//A,B为类型名称
void show(const A&);//省略了形参名
void show(const B&);//形参属于同一类型,不属于重载函数

四、重载与const形参

顶层const和底层const

顶层const

表示任意的对象是常量(对任何数据类型都适用)

底层const

与指针和引用等复合类型的基本类型部分有关,比如说一个指针类型,它的底层const就是指该指针指向的对象的值是一个const常量,不可修改,但该指针指向的位置是可以更改的。

注意:

1、指针类型既可以是顶层const,也可以作为底层const,而其他类型则不具备。

2、声明引用的const都是底层const

const修饰的形参

顶层const修饰的形参

由顶层const修饰的形参无法与未被顶层const修饰的形参区分开来,它并不影响传入函数的对象,只是限制了函数内部对参数值的修改而已,就是说顶层const只是对函数内部的参数有影响,从而无法与未被顶层const修饰的形参区别开来。

void lookup(a);
void lookup(const a);//重复声明
void lookup(int* p);
void lookup(int* const p);

底层const修饰的形参

由底层const修饰的形参会对传入的实参类型进行限制,且要求它是一个常数类型,下面举个例子来方便理解:

1、指针变量的底层const修饰

void lookup(int*);//这里省略了指针的形参名
void lookup(const int*);//这里第一和第二个函数的形参是不同的
//因为底层const修饰的是一个指针指向的常量,它与第一个函数形参的变量属于不同类型,所以形参不同,属于重载的函数

2、引用的底层const修饰(声明引用的const都是底层const)

void lookup(int&);
void lookup(const int&);//同上,这两个函数属于重载函数

标签:const,函数,形参,int,void,C++,重载,Primer
From: https://blog.51cto.com/u_16271511/8711700

相关文章

  • C++实现LL1语法分析器
    C++实现LL1语法分析器:预备知识:​ LL1分析法是一种确定的自上而下的分析方法,通过在输入中向前看固定个数(通常为1)的符号来选择正确的产生式从而实现预测分析的效果,预测分析不需要回溯。​由以上定义,LL1分析器是一种表驱动的语法分析器,分析器依赖于语法分析表,需要在输入......
  • C++_调用函数以及不同数据类型
    调用其他文件中的函数add_library可以生成我们所需的动态库或者静态库,我们要把制作出的库文件发布出去供第三方使用一些函数方法单独在一个cpp的源文件中定义,然后在另一个源文件中需要用到自定义的函数时直接调用就可以了!方法1.学过c++的人可能最熟悉的方法还是利用头文件......
  • C++中的const用法
    一、修饰普通变量:constdoublePI=3.14159;constinta=10;//这些C++中的内置类型被const修饰时,其值不可被随意更改二、修饰一个指针(即指针对应的值不可修改):但是指针作为一个变量,其可指向其他位置,只是无法通过指针来改变其指向的对象的值inta=10;intb=20;constint*p......
  • Qt/C++视频监控拉流显示/各种rtsp/rtmp/http视频流/摄像头采集/视频监控回放/录像存储
    一、前言本视频播放组件陆陆续续写了6年多,一直在持续更新迭代,视频监控行业客户端软件开发首要需求就是拉流显示,比如给定一个rtsp视频流地址,你需要在软件上显示实时画面,其次就是录像保存,再次就是一些周边的处理比如贴OSD,做图片分析等。拉流显示是第一步,如果有跨平台的需求,个人推荐......
  • 深度掌握TypeScript中的重载【函数重载、方法重载】
    深度掌握TypeScript中的重载【函数重载、方法重载】1.函数重载,方法重载的重要性著名前端流行框架底层都用到函数重载,例如:Vue3底层源码就多处使用到带泛型的函数重载。很多前端面试更是拿函数重载作为考核求职者TS技能是否扎实的标准之一,如果你不掌握函数重载,等于你的TS技......
  • C++_类实例—指针-内存
    智能指针#g++t.cpp-std=c++11C++11中引入了智能指针的概念,方便管理堆内存智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针包含在头文件<memory>中,shared_ptr、unique_ptr、weak_ptr1......
  • ue5 C++生成Actor时初始化变量
    分三步1.UGameplayStatics::BeginDeferredActorSpawnFromClass预生成actor2.给actor变量赋值3.UGameplayStatics::FinishSpawningActor最终生成actorFStringstrBPFileName="/Game/UltraDynamicSky/SkyMode.SkyMode_C";UClass*pClass=LoadClass<AActor>(thi......
  • Keil(C/C++混编)printf问题
    C++不支持UseMicroLIB,解决Keil的printf问题,现象:Debug下,点击三次run可以运行,烧入芯片独立运行死机#ifdef__cplusplusextern"C"{#endif#defineDEFAULT_HANDLE0x100;/**UARTprototypefunctions*/charUART_read(void){return0;}voidUART_write(char......
  • C++运行期多态和编译期多态(以不同的模板参数调用不同的函数)
    在面向对象C++编程中,多态是OO三大特性之一,这种多态称为运行期多态,也称为动态多态;在泛型编程中,多态基于template(模板)的具现化与函数的重载解析,这种多态在编译期进行,因此称为编译期多态或静态多态。<h1"="">1运行期多态运行期多态的设计思想要归结到类继承体系的设计上去。对......
  • C++11、C++14、C++17、C++20新特性总结(5万字详解)(转载)
    文章目录C++11是什么,C++11标准的由来C++auto类型推导完全攻略auto类型推导的语法和规则auto的高级用法auto的限制auto的应用使用auto定义迭代器auto用于泛型编程C++decltype类型推导完全攻略exp注意事项decltype推导规则decltype的实际应用汇总auto和......