详解C++函数类型与重载函数

目录
  • 1.
  • 2.
    • 问题:
  • 总结

1.

首先对重载函数,明确函数的返回类型不能决定重载函数的类别,即

int F(int ,int) ;//一个返回 int 类型的函数
void F(int ,int);//一个无返回值的函数
//两者形参列表相同,返回值类型不同,但两者不构成重载函数 

2.

注意形参列表中的默认值,使用含默认参数的重载函数时可能会产生二义性。例:

int a = 0;
int Max(int,int);
int Max(int,int,int = 0);
//则对Max(3,5)的调用会报错
 a = Max(3,5);           //错误 

另外,对默认参数,应该在函数名第一次给出的时候指定,通常在函数原型中。若已在函数原型中指定默认参数,则函数定义时不能重复给出。

问题:

在一道题中我看到了这样一个问题,简述起来就是让你调用一个值传递的重载函数和一个引用传递的重载函数,

#include<iostream>
using namespace std;
void F(int &a, int &b) {
	a = a + b;
	cout << a<<endl;
}
int F(int a, int b,) {
	return a + b;
}
int main(){
cout<<F(a,b);
F(a,b);
}

此时调用两个F函数就会报错,那如何改变函数类型来避免函数调用不明确呢?

我是这样做的,

#include<iostream>
using namespace std;
void F(int &a, int &b) {
	a = a + b;
	cout << a<<endl;
}
int F(int a, int b,int c) {
	return a + b;
}
int main(){
int a = 10;
int b = 20;
cout << F(a, b,1)<<endl;
	F(a,b);
}

即通过一个无用变量来避免类型相似。

总结

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

(0)

相关推荐

  • 详解C++ 重载运算符和重载函数

    C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载. 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同. 当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义.选择最合适的重载函数或重载运算符的过程,称为重载决策. C++ 中的函数重载 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数.类型或

  • 浅谈C++类型转化(运算符重载函数)和基本运算符重载(自增自减)

    类型转化(运算符重载函数) 用转换构造函数可以将一个指定类型的数据转换为类的对象.但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据).在C++提供类型转换函数(type conversion function)来解决这个问题.类型转换函数的作用是将一个类的对象转换成另一类型的数据. 类型转换函数的一般形式为: operator 类型名( ){ 实现转换的语句 } 下面是简单实现.这时候,Base起了两方面的作用:类和数据类型.系统会在

  • C++ 函数重载详情介绍

    文章转自微信公众号:Coder梁(ID:Coder_LT) 函数重载 函数重载还有一个别名叫函数多态,其实我个人感觉函数多态这个名字更好理解更恰当一些. 函数多态是C++在C语言基础上的新特性,它可以让我们使用多个同名函数.当然这些同名函数的参数是要有区别的,我们在函数调用的时候,编译器会自动根据我们传入的参数,从多个同名函数当中找到我们调用的那一个.和面向对象里的多态的概念很接近. 我们在定义函数的时候,编译器只会查看参数的数目和类型,而不会理会参数的名称.只要参数的数量以及类型不完全相同,就

  • C++入门(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for)

    一.C++关键字 C++总共有63个关键字,在入门阶段我们只是大致了解一下就可,在后续博客中会逐渐讲解 二.命名空间 相信学过C++的同学,一定都写过下面这个简单的程序 #include<iostream> using namespace std; int main() { cout<<"hello world"<<endl; return 0; } 我们先来看第二行代码,using namespace std , 这行代码是什么意思呢 ? 这里我们

  • C++之函数的重载

    目录 一.C++ 函数重载 1.重载规则 2.匹配原则 3.重载底层实现 4.extern "C" 总结 一.C++ 函数重载 C++ 致力于简化编程,能过函数重名来达到简化编程的目的 1.重载规则 1.函数名相同 2.参数的个数不同,类型不同,顺序不同,都可以构成重载 3.返回值类型必须相同,不同则不可以构成重载 例如: void func(int a); //ok void func(char a); //ok void func(char a,int b); //ok void

  • 详解C++函数类型与重载函数

    目录 1. 2. 问题: 总结 1. 首先对重载函数,明确函数的返回类型不能决定重载函数的类别,即 int F(int ,int) ://一个返回 int 类型的函数 void F(int ,int)://一个无返回值的函数 //两者形参列表相同,返回值类型不同,但两者不构成重载函数 2. 注意形参列表中的默认值,使用含默认参数的重载函数时可能会产生二义性.例: int a = 0; int Max(int,int); int Max(int,int,int = 0); //则对Max(3,5)

  • 详解C标准库堆内存函数

    概述 C标准库堆内存函数有4个:malloc.free.calloc.realloc,其函数声明放在了#include <stdlib.h>中,主要用来申请和释放堆内存. 堆内存的申请和释放(wiki,chs),需要发起系统调用,会带来昂贵的上下文切换(用户态切换到内核态),十分耗时.另外,这些过程可能是带锁的,难以并行化. 对于操作系统而言,内存管理的基本单位是页(通常为4K),而不是需要4 Bytes时,就给你分配4 Bytes,释放4 Bytes时,就给你释放4 Bytes. 因此,为了

  • 详解pandas中缺失数据处理的函数

    目录 一.缺失值类型 1.np.nan 2.None 3.NA标量 二.缺失值判断 1.对整个dataframe判断缺失 2.对某个列判断缺失 三.缺失值统计 1.列缺失 2.行缺失 3.缺失率 四.缺失值筛选 五.缺失值填充 六.缺失值删除 1.全部直接删除 2.行缺失删除 3.列缺失删除 4.按缺失率删除 七.缺失值参与计算 1.加法 2.累加 3.计数 4.聚合分组 五.源码 今天分享一篇pandas缺失值处理的操作指南! 一.缺失值类型 在pandas中,缺失数据显示为NaN.缺失值有3

  • 详解MySQL中的存储过程和函数

    目录 区别 优点 创建储存函数和过程 储存过程 储存函数 查看储存过程 操作 变量 赋值 变量例子 定义条件和处理过程 条件 处理程序 游标 流程控制语句 储存过程和函数就是数据器将一些处理封装起来,调用 区别 调用储存过程只需要使用CALL,然后指定储存名称和参数,参数可以是IN.OUT和INOUT 调用储存函数只需要使用SELECT,指定名称和参数,储存函数必须有返回值,参数只能是IN 优点 良好的封装性 应用程序和SQL逻辑分离 让SQL也具有处理能力 减少网络交互 能够提高系统性能 降低

  • 详解pytorch中squeeze()和unsqueeze()函数介绍

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行.squeeze(a)就是将a中所有为1的维度删掉.不为1的维度没有影响.a.squeeze(N) 就是去掉a中指定的维数为一的维度.还有一种形式就是b=torch.squeeze(a,N) a中去掉指定的定的维数为一的维度. 再看torch.unsque

  • 详解C语言中return返回函数局部变量的问题

    目录 return返回栈区局部变量的指针 return返回栈区局部的临时变量 return只读数据段和static数据 在计算机中,释放空间并不需要将空间中的内容全部置成0或者1,而是只要设置这一块空间的数据无效即可.比如在下载文件时需要花很长时间,但是删除文件却只要几秒钟,这是因为操作系统只是把文件标识(文件头链接)删掉了,文件原文还保留着,我们没了文件标识就找不到这个文件了.所以删除后的文件,还可以用特殊的办法被找回来. 这也就意味着,当函数结束调用的时候,函数中的局部变量实际上还是在的,只

  • 详解pyqt中解决国际化tr()函数不起作用的问题

    目录 前言 解决过程 前言 有些时候我们在父类中使用了 self.tr('XXX'),使用 Qt Linguist 完成翻译并导出 qm 文件后,发现子类中仍然是英文原文.比如下面这段代码: class AlbumCardBase(QWidget):     """ 专辑卡基类 """     def __init__(self, parent=None):         super().__init__(parent=parent)    

  • 详解C语言初阶之函数

    目录 1.main函数 2.自定义函数 2.1  函数的的封装和面向过程的思维 3.函数的组成 3.1函数的命名法 3.2函数的返回值 3.2.1void类型 补充: 3.3形参与实参 总结 1.main函数 第一个函数是我们的main函数,它无处不在,main函数被称之为我们的入口函数,程序在运行时,从main函数进入,从main函数出来,main函数其实就是整个程序功能的集合,所有的功能必须被包含在main里面才可以被运行(预处理命令,宏定义,全局变量什么的当然要优先处理,再次不讨论这些).

  • 详解C++中递增运算符重载的实现

    目录 递增运算符 递增运算符重载的实现 左移运算符重载 前置递增运算符重载 后置递增运算符重载 递增运算符 形如"a++"."++a".如果a初始值为1,那么"a++"结果为1,但是实际上a等于2,先读取再加1:"++a"结果为2,实际也是2.这是对于基本运算类型,那么递增运算符重载的目的就是对于对象的属性也可以直接进行前置递增和后置递增. 由于成员函数里重载写的内容少,就详细分析成员函数实现递增运算符重载 递增运算符重载的实

  • 详解TypeScript映射类型和更好的字面量类型推断

    概述 TypeScript 2.1 引入了映射类型,这是对类型系统的一个强大的补充.本质上,映射类型允许w咱们通过映射属性类型从现有类型创建新类型.根据咱们指定的规则转换现有类型的每个属性.转换后的属性组成新的类型. 使用映射类型,可以捕获类型系统中类似Object.freeze()等方法的效果.冻结对象后,就不能再添加.更改或删除其中的属性.来看看如何在不使用映射类型的情况下在类型系统中对其进行编码: interface Point { x: number; y: number; } inte

随机推荐