c++之五谷杂粮---3
3.1如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载函数。
3.1.1不允许两个函数除了返回类型外所有的要素都相同。(这也是很好解释的)
#include<iostream>
using namespace std;
int fuc(int a, double b)
{
cout<<"a= "<<a<<" "<<"b= "<<b<<endl;
return ;
}
void fuc(int a, double b)
{
cout<<"a= "<<a<<" "<<"b= "<<b<<endl;
}
int main(void)
{
//如果允许只有返回类型不同,那么下面这个该调用谁呢?
fuc(,3.14);//因为我们完全可以不关心返回值,所以这样的调用是很常见也是合法的,但是想要重载调用,就是非法的,因为编译器不知道该调用哪一个,二义性。
return ;
}
3.1.2 有默认参数的重载测试
#include<iostream>
using namespace std;
int fuc(int a, double b=3.14)
{
cout<<"a= "<<a<<" "<<"b= "<<b<<endl;
return ;
}
int fuc(int a)
{
cout<<"a= "<<a<<endl;
return ;
}
int main(void)
{
fuc();//错误,此时编译器不知道到底调用谁,所以有默认实参的重载一定要小心,尤其在后面的类当中。
return ;
}
3.1.3 忽略了顶层const的重载
eg1:
#include<iostream>
using namespace std;
int fuc(int a)
{
cout << "a= " << a << endl;
return ;
}
int fuc(const int a)
{
cout << "a= " << a << endl;
return ;
}
int main(void)
{
fuc();//错误,依旧不能重载,顶层const会被忽略,具体见前面随笔的讲解
return ;
} eg2:
void test(const int *a)
{ }
void test(int *a)
{ }
int main(void)
{
int *a=nullptr;
test(a);//底层const可以重载,如果这里改成顶层const,依旧不能重载
return ;
}
NOTE:
1、局部变量不能做默认实参。
2、重载函数的指针,指针类型必须与重载函数中的某一个的类型完全匹配,不能只匹配参数或者只匹配返回值的类型,必须完全匹配。
c++编译器可以处理重载函数名字一样的问题,如下面的fuc函数,fuc函数传递给函数指针的不会有错,根据你的函数指针指向的类型,你能调用对应的函数,注意要完全匹配。
如果下面的fuc函数 unsigend int参数的这个函数,如果函数指针调用的时候给了一个double参数,会有警告,因为double可以转换成unsigend int,这个和普通函数调用的转变一致。
int main(void)
{
void fuc(int *);
void fuc(unsigned int); void(*pf1)(int)=fuc;//错误,没有任何一个与fuc的形参列表匹配
double(*pf2)(int *)=fuc;//错误,返回类型不匹配 return ;
}
c++之五谷杂粮---3的更多相关文章
- c++之五谷杂粮---1
1. 位运算符,如果运算对象是带符号的且它的值为负,那么位运算符如何处理运算对象的“符号位”依赖于机器.此时左移操作可能会改变符号位的值,因此是一种UB. Best Practices: 关于符号位 ...
- c++之五谷杂粮---2
2.1 我们通过调用运算符(call operator)来执行函数.调用运算符的形式是一对圆括号,它作用于一个表达式,该表达式是函数或者指向函数的指针:圆括号之内是用逗号隔开的实参列表,我们用实参初 ...
- c++之五谷杂粮4---explicit
4.1在要求隐式转换的程序上下文中,我们可以通过将构造函数声明为explicit加以阻止. 关键字explicit只对一个实参的构造函数有效.需要多个实参的构造函数不能用于执行隐式转换,所以无需将这些 ...
- make——五谷杂粮
- 【转】2013年中国IT业10大公司
转自:http://www.chinaz.com/news/2013/1217/331446.shtml?zyy 1.最得志的公司:小米 在2013年,再没有一家公司像小米这样志得意满,即便看看所有的 ...
- 关于Java中的对象、类、抽象类、接口、继承之间的联系
关于Java中的对象.类.抽象类.接口.继承之间的联系: 导读: 寒假学习JavaSE基础,其中的概念属实比较多,关联性也比较大,再次将相关的知识点复习一些,并理顺其中的关系. 正文: 举个例子:如果 ...
- 一年一度!GitHub 开发者大会「GitHub 热点速递 v.22.45」
GitHub 是全球最大的开源社区,它的一举一动都深受每一位开源爱好者的关注.这周末刚落下帷幕的<GitHub Universe 2022>是 GitHub 发布最新产品.功能.报告和计划 ...
- 从一道NOI练习题说递推和递归
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...
- 《OOC》笔记(0)——为何要看这本书
<OOC>笔记(0)——为何要看这本书 <OOC>全名是<Object-oriented Programming with ANSI-C>,作者Axel-Tobia ...
随机推荐
- Linux系统CentOS6.2版本下安装JDK7详细过程
Linux系统CentOS6.2版本下安装JDK7详细过程 分类: Linux 2014-08-25 09:17 1933人阅读 评论(0) 收藏 举报 前言: java 是一种可以撰写 ...
- hdu 4031(树状数组+辅助数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4031 Attack Time Limit: 5000/3000 MS (Java/Others) ...
- 原创:【微信小程序】客服消息教程(后台以PHP示例)
1.不需要自己手动开发客服消息的,直接接入客服,不开启消息推送即可.这种模式不多讲. 2.公众号后台开启消息推送模式,配置服务器URL.TOKEN.随机串.数据模式.数据格式(XML或JSON),这个 ...
- TP3.2之WHERE组合条件处理
1.条件都是int类型: $User->where('type=1 AND status=1')->select(); 2.条件包含字符串类型: 使用3.1以上版本的话,使用字符串条件的时 ...
- PHP5.5新特性
详情见:http://www.php.net/manual/zh/migration55.new-features.php 1. 生成器 yield关键字 yield的中文文档在这里:http://p ...
- Java虚拟机学习 - 对象引用强度 ( 8 )
无论是通过计数算法判断对象的引用数量,还是通过根搜索算法判断对象引用链是否可达,判定对象是否存活都与“引用”相关. 引用主要分为 :强引用(Strong Reference).软引用(Soft Ref ...
- Google Map 符号
符号 简介 如果您想在标记上使用基于矢量的图标,或者向多段线添加图像,便可使用符号. 标记支持使用光栅图像以及矢量图像.请参阅有关定制标记图标的文档. Symbol 是一种可显示在 Marker ...
- Google的创新九原则(转)
原文url:http://www.365xiaoxi.com/All/News/2013-11-22/6432.html 想知道是什么让Google成为生产力与创造力的圣杯?当然不是喝山景城脚下的神水 ...
- linux文件系统管理的工作原理
一.系统在初始化时如何识别硬盘 1.系统初始时根据MBR的信息来识别硬盘,其中包括了一些执行文件就来载入系统,这些执行文件就是MBR里前面446bytes里的boot loader 程式,而后面的16 ...
- WinForm开发,窗体显示和窗体传值相关知识总结
主窗体中代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...