函数的重载

函数的重载

C++ 里的函数重载(overloading)机制比我们此前见到的东西都高深,这种语言的灵活性和强大功能在它身上体现得淋漓尽致。

所谓函数重载的实质就是用同样的名字再定义一个有着不同参数但有着同样用途的函数。(人格分裂、多重身份……)

注意:可以是参数个数上的不同,也可以是参数数据类型上的不同!

实例演示:convertTemperature.cpp

 #include <iostream>

 void convertTemperature(double tempIn, char typeIn);

 int main()
{
double tempIn;
char typeIn; std::cout << "请以【xx.x C】或【xx.x F】的形式输入温度: ";
std::cin >> tempIn >> typeIn;
std::cin.ignore(, '\n');
std::cout << "\n"; convertTemperature(tempIn, typeIn); return ;
} void convertTemperature(double tempIn, char typeIn)
{
const unsigned short ADD_SUBTRACT = ;
const double RATIO = 9.0 / 5.0; float tempOut;
char typeOut; switch( typeIn )
{
case 'C':
case 'c':
tempOut = (tempIn * RATIO) + ADD_SUBTRACT;
typeOut = 'F';
typeIn = 'C';
break; case 'F':
case 'f':
tempOut = (tempIn - ADD_SUBTRACT) / RATIO;
typeOut = 'C';
typeIn = 'F';
break; default:
typeOut = 'E';
break;
} if( typeOut != 'E' )
{
std::cout << tempIn << typeIn << " = " << tempOut << typeOut << "\n\n";
}
else
{
std::cout << "请按照给出格式输入!" << "\n\n";
} std::cout << "请输入任意字符结束!" << "\n";
std::cin.get();
}

按照思路,我们自己试着来动手实现第一个函数的重载:convertTemperature_2.cpp

 #include <iostream>

 void convertTemperature(double tempIn, char typeIn);
void convertTemperature(int tempIn, char typeIn); int main()
{
double tempIn;
int tempInInt;
char typeIn; std::cout << "请以【xx.x C】或【xx.x F】的形式输入温度: ";
std::cin >> tempIn >> typeIn;
std::cin.ignore(, '\n');
std::cout << "\n";
convertTemperature(tempIn, typeIn); std::cout << "请以【xx C】或【xx F】的形式输入温度: ";
std::cin >> tempInInt >> typeIn;
std::cin.ignore(, '\n');
std::cout << "\n";
convertTemperature(tempInInt, typeIn); return ;
} void convertTemperature(double tempIn, char typeIn)
{
const unsigned short ADD_SUBTRACT = ;
const double RATIO = 9.0 / 5.0; double tempOut;
char typeOut; switch( typeIn )
{
case 'C':
case 'c':
tempOut = (tempIn * RATIO) + ADD_SUBTRACT;
typeOut = 'F';
typeIn = 'C';
break; case 'F':
case 'f':
tempOut = (tempIn - ADD_SUBTRACT) / RATIO;
typeOut = 'C';
typeIn = 'F';
break; default:
typeOut = 'E';
break;
} if( typeOut != 'E' )
{
std::cout << tempIn << typeIn << " = " << tempOut << typeOut << "\n\n";
}
else
{
std::cout << "请按照给出格式输入!" << "\n\n";
} std::cout << "请输入任意字符结束!" << "\n";
std::cin.get();
} void convertTemperature(int tempIn, char typeIn)
{
const unsigned short ADD_SUBTRACT = ;
const double RATIO = 9.0 / 5.0; int tempOut;
char typeOut; switch( typeIn )
{
case 'C':
case 'c':
tempOut = (tempIn * RATIO) + ADD_SUBTRACT;
typeOut = 'F';
typeIn = 'C';
break; case 'F':
case 'f':
tempOut = (tempIn - ADD_SUBTRACT) / RATIO;
typeOut = 'C';
typeIn = 'F';
break; default:
typeOut = 'E';
break;
} if( typeOut != 'E' )
{
std::cout << tempIn << typeIn << " = " << tempOut << typeOut << "\n\n";
}
else
{
std::cout << "请按照给出格式输入!" << "\n\n";
} std::cout << "请输入任意字符结束!" << "\n";
std::cin.get();
}

这个例子,我们可以体验到:对函数进行重载,事实上可以简化编程工作和提高代码可读性。

大家想必已经体会到重载的优越性了,事实上,重载不是一个真正的面向对象特征,它只是可以简化编程工作的一种方案,而简化工作正式C++ 语言的全部追求。

有以下几点需要大家注意的:

对函数(方法)进行重载一定要谨慎,不要“无的放矢”或“乱点鸳鸯”;

要知道重载函数越多,该程序就越不容易看懂;

注意区分重载和覆盖(覆盖后边我们会讲到);

我们只能通过不同参数进行重载,但不能通过不同的返回值(尽管后者也是一种区别);

最后,对函数进行重载的目的是为了方便对不同数据类型进行同样的处理。

为什么不能通过返回值不同来重载函数(方法)呢?

利用重载函数的方法设计一个程序,改程序通过函数”calc()”进行计算并返回显示结果。

当传入一个参数时,计算该参数的平方值;

当传入两个参数时,计算两个参数的积;

当传入三个参数时,计算三个参数的和。

c++学习笔记---06--- 函数的重载的更多相关文章

  1. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记

    机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...

  2. Matlab学习笔记 figure函数

    Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...

  3. matlab学习笔记 bsxfun函数

    matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下. ...

  4. iOS学习笔记06—Category和Extension

    iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inher ...

  5. matlab学习笔记13_1 函数返回值

    一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://blog.csdn.net/qq_36556 ...

  6. 初探C++运算符重载学习笔记&lt;2&gt; 重载为友元函数

    初探C++运算符重载学习笔记 在上面那篇博客中,写了将运算符重载为普通函数或类的成员函数这两种情况. 以下的两种情况发生.则我们须要将运算符重载为类的友元函数 <1>成员函数不能满足要求 ...

  7. c++学习笔记之函数重载和模板理解

    1.函数重载: C++ 不允许变量重名,但是允许多个函数取相同的名字,只要参数表不同即可,这叫作函数的重载(其英文是 overload).重载就是装载多种东西的意思,即同一个事物能完成不同功能. 所谓 ...

  8. C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖

    学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...

  9. swift学习笔记2——函数、闭包

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  10. haskell学习笔记_函数

    一开始学习函数式编程语言就被告知函数式编程语言是一种“定义式”的语言,而不是一种命令式的语言,在学习haskell的函数语法时,此感觉更加强烈,haskell的函数定义倾向于一种类似C++里面的swi ...

随机推荐

  1. 使用百度ueditor的插件使得代码高亮显示

    一.在show.html模板中,引入ueditor的插件,并调用 <link rel="stylesheet" href="__ROOT__/Data/uedito ...

  2. Vi快捷操作 vim配置【shell文件格式从windows转换为linux】

    vim配置 http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html gg 首行 dd 删除当前行 :.,$d  删除全部内容 :se ...

  3. UI自动化测试(三)对页面中定位到的元素对象做相应操作

    前两天分别讲述了UI自动化测试基础以及对页面元素该如何进行定位,这一篇自然就是对定位到的页面元素对象进行相应操作啦. 阅读目录 1.常用操作元素对象的方法 2.鼠标事件操作 3.键盘事件操作 4.We ...

  4. Apache shiro的简单介绍与使用(与spring整合使用)

    apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它 ...

  5. 通过修改 LayoutInflater,全局替换字体!!!

    序 在 Android 下使用自定义字体已经是一个比较常见的需求了,最近也做了个比较深入的研究. 那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以我 ...

  6. uvalive 3135 Argus

    https://vjudge.net/problem/UVALive-3135 题意: 有一个系统有多个指令,每个指令产生一个编号为qnum的时间,每个指令的触发间隔不相同,现在给出若干个指令,现在的 ...

  7. jdbc-日期格式的转换及代码示例

     时间类型相互转换 把数据库的三种时间类型赋给java.util.Date,基本不用转换,因为这是把子类对象给父类的引用,不需要转换. java.sql.Date date = - java.ut ...

  8. java类加载小记

    java类只有当创建实体或被调用时才会加载,加载时按 编码顺序 先加载static后加载普通的.static模块和static变量都是同一等级的,谁写前面就先加载谁. 在调用某个静态类的方法时,会按编 ...

  9. WPF 圖表控件 MetroChart

    Torsten Mandelkow MetroChart包括以下: ColumnChart(ClusteredColumnChart,StackedColumnChart,StackedColumnC ...

  10. Hyper-v 虚拟机安装win7

    Hyper-v 是微软自带的虚拟机 一般安装win10都有 对小娜说:Hyper就会出现 进入Hyper-v 如果虚拟机不可用 启动服务 新建虚拟机 一般设置可以自己随意 虚拟机第一代才可以使用win ...