函数重载的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种错误示例的更多相关文章

  1. javascript 函数重载另一种实现办法

    最近在读javascript忍者 感受下jquery作者 john Resig对于js的独到见解. 先上代码: function addMethod(object,name,fn){ var old ...

  2. 深入浅出TypeScript(3)- 函数重载和泛型

    面向对象特性中,最根本的就是面向对象的三大基本特征:封装.继承.多态.同时,TypeScript中也存在多态的使用,比如函数重载,今天我们先看一下函数重载以及泛型的概念. 什么是函数重载 简单来说,函 ...

  3. c++中的函数重载、函数重写、函数重定义

    目录 一.函数重载 二.函数重写 三.函数重定义 为了更加深刻的理解 函数重载.重写.重定义,我们可以带着如下这两个问题去思考: 1.子类中是否可以定义父类中的同名成员?为什么? 可以,因为子类与父类 ...

  4. c++类成员函数重载常量与非常量版本时避免代码重复的一种方法

    c++有时候需要为类的某个成员函数重载常量与非常量的版本,定义常量版本是为了保证该函数可作用于常量类对象上,并防止函数改动对象内容.但有时两个版本的函数仅仅是在返回的类型不同,而在返回前做了大量相同的 ...

  5. 039-PHP使用闭包函数来进行父实例的变量自增,错误示例

    <?php // 如何使用闭包函数来进行父实例的变量自增,错误示例 function demo(){ $num = 1; $func = function() use($num){ echo $ ...

  6. 4.C++中的函数重载,C++调用C代码,new/delete关键字,namespace(命名空间)

    本章主要内容: 1)函数重载 2)C++调用C代码 3)new/delete关键字实现动态内存分配 4)namespace命名空间 大家都知道,在生活中,动词和不同的名词搭配一起,意义都会大有不同,比 ...

  7. JavaScript函数重载

    译者按: jQuery之父John Resig巧妙地利用了闭包,实现了JavaScript函数重载. 原文: JavaScript Method Overloading 译者: Fundebug 为了 ...

  8. 5.3 C++用顶层函数重载操作符

    参考:http://www.weixueyuan.net/view/6381.html 总结: 可以将操作符重载函数声明为顶层函数. 如果以顶层函数的形式重载操作符时,二元操作符重载函数必须有两个参数 ...

  9. Javascript函数重载,存在呢—还是存在呢?

    1.What's is 函数重载? );//Here is int 10 print("ten");//Here is string ten } 可以发现在C++中会根据参数的类型 ...

随机推荐

  1. hdu 3657 最小割(牛逼!!!!)总算理解了

    <strong></strong> 转载:http://blog.csdn.net/me4546/article/details/6662959 加颜色的太棒了!!! 在网上看 ...

  2. hdu 1027

    #include<stdio.h> #include<algorithm> using namespace std; int a[1100]; int main() {  in ...

  3. .net如何统计在线人数

    原文发布时间为:2008-10-17 -- 来源于本人的百度文章 [由搬家工具导入] 统计在线用户的作用不言而喻,就是为了网站管理者可以知道当前用户的多少,然后根据用户数量来观察服务器或者程序的性能, ...

  4. 【git】Git 提示fatal: remote origin already exists 错误解决办法

    今天使用git 添加远程github仓库的时候提示错误:fatal: remote origin already exists. 最后找到解决办法如下: 1.先删除远程 Git 仓库 $ git re ...

  5. HDU - 2059 龟兔赛跑(多阶段决策dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=2059 初始把起点和终点也算做充电站,设dp[i]是到第i个充电站的最短时间,那么dp[n+1]即是乌龟到达终点的 ...

  6. 51Nod——T 1686 第K大区间

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 ...

  7. 洛谷 P1318 积水面积

    P1318 积水面积 题目描述 一组正整数,分别表示由正方体迭起的柱子的高度.若某高度值为x,表示由x个正立方的方块迭起(如下图,0<=x<=5000).找出所有可能积水的地方(图中蓝色部 ...

  8. java编程思想-多态

    java中除了static方法和final方法(private方法属于final方法)之外,其他所有的方法都是动态绑定即运行时绑定. public class test { private void ...

  9. BZOJ 2208 JSOI2010 连通数 Tarjan+拓扑排序

    题目大意:给定一个n个点的有向图,求有多少点对(x,y),使x沿边可到达y 设f[i][j]为从i到j是否可达 首先强联通分量中的随意两个点均可达 于是我们利用Tarjan缩点 缩点之后是一个拓扑图. ...

  10. LVS 负载均衡 (VS/DR模式 与 VS/TUN 模式)

    一.VS/DR模式 ①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP. ②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将目标MAC改为了RIP的MAC ...