C++函数重载的4种错误示例
函数重载的4种错误示例:
#include <iostream>
#include <string>
using namespace std;
//函数重载 同函数名,函数重载有3种情况:参数类型不同、参数个数不同、参数顺序不同
//1.不能根据返回类型作为重载的依据
#if 0
int add(int num1,int num2)
{
cout << "int add(int num1,int num2)" << endl;
return num1+num2;
}
#endif
//--
#if 0
float add(int num1,int num2) //error: 只是返回类型不同,函数名、参数都一致,则不能算作重载,int add()和float add()一起出现会报错,故用#if屏蔽
{
cout << "float add(float num1,float num2)" << endl;
return num1+num2;
}
#endif
#if 0
//2.存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数
long add(long num1,long num2)
{
cout << "long add(long num1,long num2)" << endl;
return num1+num2;
}
double add(double num1,double num2)
{
cout << "double add(double num1,double num2)" << endl;
return num1+num2;
}
#endif
//3.存在二义性,因为int可以赋给int,也可以赋给const int&,也可以赋给int&,编译器不知道应该调用哪个函数
#if 0
int add(int num1,int num2)
{
cout << "int add(int num1,int num2)" << endl;
return num1 + num2;
}
//--
int add(const int &num1,const int &num2) //重载了第1个add函数
{
cout << "int add(const int &num1,const int &num2)" << endl;
return num1 + num2;
}
//--
int add(int &num1,int &num2) //重载了第1个add函数
{
cout << "int add(int &num1,int &num2) " << endl;
return num1 + num2;
}
#endif
//4.存在二义性,编译器不知道应该调用哪个函数
int add(int num1,int num2)
{
cout << "int add(int num1,int num2)" << endl;
return num1+num2;
}
//--
,)
{
cout << "int add(int num1,int num2=0,int num3=0)" << endl;
return num1+num2+num3;
}
int main()
{
//1.不能根据返回类型作为重载的依据
#if 0
int res;
res = add(,); //error,存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数
#endif
//2.存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数
#if 0
int num1,num2;
long res;
//res = add(num1,num2); //error,存在二义性,因为int可以转成long,也可以转成double,编译器不知道应该调用哪个函数
#endif
//3.存在二义性,因为int可以赋给int,也可以赋给const int&,也可以赋给int&,编译器不知道应该调用哪个函数
#if 0
int res;
res = add(,); //erroe:存在二义性,编译器不知道应该调用哪个函数
#endif
//4.存在二义性,编译器不知道应该调用哪个函数
int res;
//res = add(1,2); //error:存在二义性,编译器不知道应该调用哪个函数
}
C++函数重载的4种错误示例的更多相关文章
- javascript 函数重载另一种实现办法
最近在读javascript忍者 感受下jquery作者 john Resig对于js的独到见解. 先上代码: function addMethod(object,name,fn){ var old ...
- 深入浅出TypeScript(3)- 函数重载和泛型
面向对象特性中,最根本的就是面向对象的三大基本特征:封装.继承.多态.同时,TypeScript中也存在多态的使用,比如函数重载,今天我们先看一下函数重载以及泛型的概念. 什么是函数重载 简单来说,函 ...
- c++中的函数重载、函数重写、函数重定义
目录 一.函数重载 二.函数重写 三.函数重定义 为了更加深刻的理解 函数重载.重写.重定义,我们可以带着如下这两个问题去思考: 1.子类中是否可以定义父类中的同名成员?为什么? 可以,因为子类与父类 ...
- c++类成员函数重载常量与非常量版本时避免代码重复的一种方法
c++有时候需要为类的某个成员函数重载常量与非常量的版本,定义常量版本是为了保证该函数可作用于常量类对象上,并防止函数改动对象内容.但有时两个版本的函数仅仅是在返回的类型不同,而在返回前做了大量相同的 ...
- 039-PHP使用闭包函数来进行父实例的变量自增,错误示例
<?php // 如何使用闭包函数来进行父实例的变量自增,错误示例 function demo(){ $num = 1; $func = function() use($num){ echo $ ...
- 4.C++中的函数重载,C++调用C代码,new/delete关键字,namespace(命名空间)
本章主要内容: 1)函数重载 2)C++调用C代码 3)new/delete关键字实现动态内存分配 4)namespace命名空间 大家都知道,在生活中,动词和不同的名词搭配一起,意义都会大有不同,比 ...
- JavaScript函数重载
译者按: jQuery之父John Resig巧妙地利用了闭包,实现了JavaScript函数重载. 原文: JavaScript Method Overloading 译者: Fundebug 为了 ...
- 5.3 C++用顶层函数重载操作符
参考:http://www.weixueyuan.net/view/6381.html 总结: 可以将操作符重载函数声明为顶层函数. 如果以顶层函数的形式重载操作符时,二元操作符重载函数必须有两个参数 ...
- Javascript函数重载,存在呢—还是存在呢?
1.What's is 函数重载? );//Here is int 10 print("ten");//Here is string ten } 可以发现在C++中会根据参数的类型 ...
随机推荐
- Codeforces915G. Coprime Arrays
n<=2e6的数组,m<=2e6个询问,对1<=i<=m的每个i问:只用<=i的数字填进数组,有多少种方案使数组的总gcd=1.强制把每个询问的答案求出来. 比如说现在有 ...
- 分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类
一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlse ...
- 对一个deb包的解压、改动、又一次打包全过程方法
/********************************************************************* * Author : Samson * Date ...
- Cocos2d-x v3.1.1 创建以及编译项目
1.安装python, 并将安装路径增加系统环境变量中; 2. 执行cocos2d-x根文件夹下的setup.py; 3. 进入cmd, 输入: cocos new 项目名称 -p 包名 -l 语言类 ...
- ubuntu Install Firefox
Firefox 下载文件以.tar和.bz2格式保存,必须从这些压缩包中提取文件.不想删除当前安装的 Firefox,给每个版本的 Firefox 创建一个单独的文件夹. 例如:1.Firefox 版 ...
- AutoCAD菜单加载失败 找不到文件mnc 怎么办
菜单加载失败,找不到文件 SWFILECONV(mnu/mns/mnc) 找到CAD安装目录下的swfileconv.arx文件,用记事本打开,清空内容,然后保存即可.
- 如何在其他js 引入main.js 中 vue 的实例?
1.原因解析 经测试发现,代码先执行了 index.js >> main.js >> Home.vue scr/api/index.js src/main.js src/co ...
- openstack (3)---------部署memcached缓存服务,keystone服务
一.memcached概念 Memcached 是一个开源的.高性能的分布式内存对象缓存系统.通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度,加速动态WEB应用.减轻数据库负载 ...
- SQL Server 海量数据查询代码优化以及建议
1.应尽量避免在 where 子句中对字段进行 null 值推断,否则将导致引擎放弃使用索引而进 行全表扫描,如: select id from t where num is nu ...
- python 【第一篇】初识python
人生苦短,我用python Python是我喜欢的语言,简洁.优美.容易使用.所以我总是很激昂的向朋友宣传Python的好处. python起源 1989年,为了打发圣诞节假期,Guido开始写Pyt ...