一、C++中的函数重载

什么是函数重载?

我的理解是:

(1)用一个函数名定义不同的函数;

(2)函数名和不同参数搭配时函数会有不同的含义;

举例说明:

 #include <stdio.h>
#include <string.h> int func(int x)
{
return x;
} int func(int a, int b)
{
return a+b;
} int func(const char* s)
{
return strlen(s);
} int main(int argc,char* argv[])
{
printf("func(3) = %d\n",func());
printf("func(5,6) = %d\n",func(,));
printf("func(\"file cpp\") = %d\n",func("file cpp")); return ;
}

运行结果:

分析:

函数的重载在使用时,会根据传入的参数去选择执行对应的函数

总结:函数重载至少要满足下面的一个条件

(1)参数个数不同
(2)参数类型不同
(3)参数顺序不同
 
二、C++中的函数默认参数
举例说明
 #include <stdio.h>

 int func(int a, int b = )
{
return (a+b);
} int main(int argc,char* argv[])
{
printf("func(3) = %d\n",func());
printf("func(3,2)= %d\n",func(,)); return ;
}

运行结果:

 
二、当函数重载与默认参数同时出现时
在刚刚开始学习的时候,分开学习函数重载和默认参数,两种情况都理解了。但是,突然想到如果这两个同时出现会会出现一个什么样的结果呢?
实例代码:
 #include <stdio.h>

 int func(int a)
{
return (a);
} int func(int a, int b = )
{
return (a+b);
} int main(int argc,char* argv[])
{
printf("func(3) = %d\n",func());
printf("func(3,2)= %d\n",func(,));
printf("test for temp.cpp\n");
return ;
}

写完了后,就在想代码执行后,到底会调用哪一个函数呢?

结果:

编译出错,错误信息:error: call of overloaded ‘func(int)’ is ambiguous printf("func(3)  = %d\n",func(3));
 
分析:
在C++的编译器中,如果出现了函数重载和函数带有默认参数时,编译是会出错的。
 
总结:
由于C++的语言特性,与C相比多了很多的特性,但是在这些的特性中又会存在一个相互冲突的部分,函数重载与函数默认参数就是其中一个。

C++函数重载遇到了函数默认参数情况的更多相关文章

  1. js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)

    js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...

  2. C++的函数重载和main函数之外的工作

    今天被问到一个C++的函数重载问题,一下子没反应过来,这种基础的问题竟然忘记了,以下记录一下这些忘记的内容.     函数重载 函数重载的定义是:在相同的作用域中,如果函数具有相同名字而仅仅是形参表不 ...

  3. 函数重载(overload)和函数重写(override)

    1. 前言: 在C++中有两个非常容易混淆的概念,分别是函数重载(overload)和函数重写(overwirte).虽然只相差一个字,但是它们两者之间的差别还是非常巨大的. 而通过深入了解这两个概念 ...

  4. Python之在函数中使用列表作为默认参数

      本文将介绍笔者在工作中遇到的Python的一个坑,那就是使用列表作为默认参数.   我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使 ...

  5. python函数中的位置参数、默认参数、关键字参数、可变参数区别

    一.位置参数 调用函数时根据函数定义的参数位置来传递参数. #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_d ...

  6. Python在函数中使用列表作为默认参数

    在学习中遇到的Python的一个坑,那就是使用列表作为默认参数. 我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使用列表作为函数的默认参 ...

  7. 【C++】多态性(函数重载与虚函数)

    多态性就是同一符号或名字在不同情况下具有不同解释的现象.多态性有两种表现形式: 编译时多态性:同一对象收到相同的消息却产生不同的函数调用,一般通过函数重载来实现,在编译时就实现了绑定,属于静态绑定. ...

  8. C++ 函数声明中指定,默认参数

    C++ 在声明函数的时候,如果指定了,参数的默认值,再调用函数的时候可以省略后面的参数. 如果调用函数写上的参数,但是不全.参数列表后面的使用默认值.如下例子,一看就清楚了. #include < ...

  9. 函数重载不仅仅是看其参数,还要看是否有const修饰

    比如QString有两个函数,可以堂而皇之的存在,原因就在于有了const修饰以后,编译器不把两个函数当作同一个函数名了: QChar * data() const QChar * data() co ...

随机推荐

  1. Distinct Substrings - spoj 694(不重复子串个数)

    题目大意:RT   分析:练手题目....后缀数组确实很强大.....多理解height数组, 切勿使用模版,后缀数组本身就有很多细节,多犯错更有利理解这个算法.   代码如下: ========== ...

  2. [置顶] SVN服务器搭建和使用

    Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http:// ...

  3. sdut-2725-The Urge to Merge-状压DP

    把数组竖起来,从上往下走. 如果当前位置是竖着乘的,那么第一个点标记为1.否则标记为0. 样例最终的状态为: 0 0 1 0 1 0 1 0 0 0 0 0 #include<iostream& ...

  4. css3实践—创建3D立方体

    css3实践-创建3D立方体 要想实现3D的效果,其实非常简单,只需指定一个元素为容器并设置transform-style:preserve-3d,那么它的后代元素便会有3D效果.不过有很多需要注意的 ...

  5. 基于XMPP实现的Openfire的配置安装+Android客户端的实现

    最近在整理一些这方面的资料,闲话少说,咱还是直奔主题吧 :) 一.基于xmpp实现的openfire的配置安装 1. 下载最新的openfire安装文件 官方下载站点: http://www.igni ...

  6. [RxJS] map vs flatMap

    What's the difference between map and flatmap? First, let's show what map is. To show that, I need a ...

  7. spring aop 如何切面到mvc 的controller--转载

    原文:http://yjian84.iteye.com/blog/1920787 网上搜罗半天,不知道什么原因,看了源码,好像他们说的controller 是不受代理的,也对哈,不知道怎么办,于是在h ...

  8. JSP-注释,脚本元素,指令

    jsp中的注释 jsp隐藏注释 完全对客户机隐藏,不会将注释内容发送给客户机. 其语法格式为:<%-- comment --%> comment为要添加的文本注释内容. HTML注释 不完 ...

  9. [转] Android学习系列(29)--App调试的几个命令实践

    在Android的应用开发中,我们会用到各种代码调试:其实在Android的开发之后,我们可能会碰到一些随机的问题,如cpu过高,内存泄露等,我们无法简单的进行代码调试,我们需要一个系统日志等等,下面 ...

  10. Python之路【第十四篇】:AngularJS --暂无内容-待更新

    Python之路[第十四篇]:AngularJS --暂无内容-待更新