第2讲 C++对C的函数的扩充及使用

合集下载

C++对C语言的增强与扩展

C++对C语言的增强与扩展

引用分为左值引用和右值引用。

左值引用主要用于函数参数传递,可以避免拷贝带来的开销。

例如:void foo(vector<int>& v) {// 通过引用v直接修改原vector的内容}右值引用则主要用于移动语义,可以避免不必要的拷贝,提高程序效率。

关于引用的具体用法,我会在后续文章中详细介绍。

内联函数内联函数是C++的一个重要优化手段。

通过inline关键字,编译器会在调用处直接展开函数体,从而消除函数调用的开销。

内联函数主要适用于一些简短、频繁调用的函数。

需要注意的是,inline只是一种请求,编译器不保证一定会内联。

函数重载C++支持函数重载,即在同一作用域内可以定义名字相同但参数不同的函数。

编译器会根据实参的类型和数量自动匹配对应的函数。

例如:int add(int x, int y) {return x + y;}double add(double x, double y) {return x + y;}add(1, 2); // 调用第一个addadd(1.0, 2.0); // 调用第二个add默认参数在C++中,我们可以为函数参数指定默认值。

当调用函数时如果没有传入对应的实参,则使用默认值。

例如:void foo(int x, int y = 0) {// ...}foo(1); // 相当于foo(1, 0)foo(1, 2); // y使用实参2需要注意的是,默认参数要从右到左连续定义,不能间隔。

占位参数占位参数只有参数类型,没有参数名,在函数体内不能使用它的值。

它的主要目的是凑齐参数列表,以便于函数重载。

例如:void foo(int);void foo(int, int = 0); // 占位参数,以便与上一个foo重载。

第2章C对C的扩充

第2章C对C的扩充
using namespace std;
就可以直接使用标准C++库中的所有成员。
注意:如果使用了名空间std,则在使用 #include编译预处理命令包含头文件时,必须 去掉头文件的扩展名.h,否则会出错。
2.5 C++语言的输入输出
C++语言另外定义了一套流对象与运算符来替代C 语言中对标准输入输出函数scanf和printf的引用。 C++语言的保留字为: cout<<“输出内容”<<…;//cout为标准输出流对象 (默认输出到显示器)
cout<<n2;
}
补充(写出程序执行结果)
#include<iostream>
// 使用名空间std,则必须去掉.h扩展名
#include<iomanip>
using namespace std;
void main()
{ int n,count=0; for(n=1;n<=100;++n) { cout<<setfill('*')<<setw(10)<<n; count++; if(count%5==0) cout<<endl; }
*p=5;
*p=5;
也可写成:
cout<<*p; p=new int(5);
delete p; }// 释放内存空间
4.用new建立数组类型的变量 指注意针在变使量用d=elenteew时,数不据用类考型虑[数数组组的大维小数]。;
有时,并不能保证一定可以从堆内存中获得所需空间,

第二讲:C 对C的扩充(1)

第二讲:C  对C的扩充(1)

第二讲:C++对C的扩充(1)本讲基本要求掌握:C++的输入、输出;定义常变量;函数原形的声明的方式;函数的重载与函数模板。

理解:C++程序的基本构成;C与C++程序的主要区别。

了解:C++基本程序的设计。

重点、难点:C++的输入、输出;定义量变量;函数原形的声明的方式;函数的重载与函数模板。

一、从C到C++1、问题的提出:C语言是结构化和模块化的语言,它是面向过程的。

在处理较小规模的程序时,程序员用C语言较为得心应手。

但是当问题比较复杂、程序的规模比较大时,结构化程序设计方法就显出它的不足。

c程序的设计者必须细致地设计程序中的每一个细节,准确地考虑程序运行时每一时刻发生的事情,例如各个变量的值是如何变化的,什么时候应该进行哪些输入,在屏幕上应该输出什么等。

这对程序员的要求是比较高的,如果面对的是一个复杂问题,程序员往往感到力不从心。

当初提出结构化程序设计方法的目的是解决软件设计危机,但是这个目标并未完全实现。

2、解决方案:为了解决软件设计危机,在20世纪80年代提出了面向对象的程序设计(object oriented programming,OOP)思想,这就需要设计出能支持面向对象的程序设计方法的新语言。

Smalltalk就是当时问世的一种面向对象的语言。

而在实践中,人们发现由于C语言是如此深入人心,使用如此广泛,以至最好的办法不是另外发明一种新的语言去代替它,而是在它原有的基础上加以发展。

在这种形势下,C++应运而生。

C++是由AT&TBell(贝尔)实验室的Bjame Stroustrup博士及其同事于20世纪80年代初在C浯言的基础上开发成功的。

C++保留了C语言原有的所有优点,增加了面向对象的机制。

由于C++对c的改进主要体现在增加了适用于面向对象程序设计的“类(class)”,因此最初它被Bjarne Stroustrup称为”带类的C”。

后来为了强调它是C的增强版,用了C语言中的自加运算符“++”,改称为C++。

第1章绪论C对C语法扩充

第1章绪论C对C语法扩充
3. 命名空间的作用:建立一些互相分隔的作用域,把一些全局实体分隔 开来。
一个命名空间将不同的标识符集合在一个命名作用域 (named scope)内。引入命名空间的目的是为了解 决命名冲突。
例如,声明一个命名空间NS: namspace NS { class File; void Fun (); }
I/O操作
C++完全支持C的I/O函数集,但C++的I/O类库和I/O操 作内容也很多,需要分阶段逐步去掌握。这里先举两个 简单的实例:
C++中的 out<< 相当于C中的输出函数printf(); C++中的 cin>> 相当于C中的输入函数scanf()。
Hello world
#include<iostream> using namespace std;
第1章绪论C对C语法扩充
C++四天课程内容
绪论、C++对C的语法扩充 类与对象 C++程序的结构 继承和派生 多态性
学习C++的目的
C和C++,是在不同场合下用来解决问题的工具 C:主要用于底层代码编写、工业控制程序等 C++ : 主 要 用 来 开 发 大 型 软 件 、 图 形 界 面 应 用 程 序
在新的C++标准程序库中,所有标识符都声明在 命名空间std中。
回头来看刚才的程序。“std”是“命名空间”。程序中有 若干名字,程序规模大起来后,难免会有名字冲突,就好像学 校中遇到同名学生:A班中有张三,B班中也有张三,当A、B班 在一起上课时,就有名字冲突问题。解决的简单办法就是两个 张三分别命名为:“A班的张三”,“B班的张三”。C++也是 这样来解决问题的。为了防止程序员自己又命名一个“cout” 而造成冲突,就特地对语言专门提供的标准设备名“cout”冠 以前缀“std::”,表示“标准库中的cout”。

第二次课 C++在非面向对象方面对C的扩充

第二次课  C++在非面向对象方面对C的扩充

18
第2章 从C到C++ 章 到
说明: (1) 如果用const定义的是一个整型的常量,关键字 int可以省略。下面两行定义是等价的: const int LIMIT=100; const LIMIT=100; (2) 常量一旦被建立,在程序的任何地方不能再修 改。 (3) 与#define定义的常量有所不同,const定义的 常量可以有自己的数据类型,这样C&#性。
1.变量定义方法 C++中几乎可以在任何位置、任何时刻根据需要定义局部变量。 【例2.1】灵活变量定义的例子。 #include <iostream.h> int sum=0; //在函数体外定义变量sum void main(){ int a[5]={0,1,2,3,4}; for(int i=0;i<5;i++) //在for语句中定义变量i sum+=a[i]; double avg=sum/5; //在语句体中定义变量avg cout<<"sum="<<sum<<",average="<<avg<<endl; cout<<”i=”<<i<<endl; }
21
第2章 从C到C++ 章 到 const的另外一个用途是:如果某个函数参数不允许被改变 如果某个函数参数不允许被改变 可用const将其声明为常变量。 const将其声明为常变量 时,可用const将其声明为常变量。例如: 【例2-5】使用const修饰函数参数。 #include <iostream.h> void fun(const int m) { m=10; //错误,函数不能修改m,只能使用m cout<<m+100; //正确,使用m } void main(){ int n=10; fun(n); cout<<n; //输出 10 }

C++对C的扩展二

C++对C的扩展二

. . .
. .
.
. . . . . . . .
. . . . . . . .
. . . . . . . . .
. .
. .
. .
. .
.
耿耀君 (计算机科学系)
C 及其扩展
May 24, 2015
9 / 60
C ++中的类型转换
四种强制类型转换说明符的解释
const_cast :顾名思义,将转换掉表达式的 const 和 volatile 性质。 static_cast :编译器隐式执行的任何类型转换都可以由 static_cast 显式完成。
.
. . . . . . . .
. . . . . . . .
. . . . . . . . .
. .
. .
. .
. .
.
耿耀君 (计算机科学系)
C 及其扩展
May 24, 2015
4 / 60
类型转换
问题
表达式中的操作数经常可能具有不同的类型,那么在计算表达式时如何 处理呢? 例如: int i v a l ; i v a l = 3.54+2;
. . .
. .
.
. . . . . . . .
. . . . . . . .
. . . . . . . . .
. .
. .
. .
. .
.
耿耀君 (计算机科学系)
C 及其扩展
May 24, 2015
5 / 60
类型转换的类型和发生时机
类型转换分为两种:隐式类型转换和显式类型转换,其中隐式类型转换 由编译器完成,显式类型转换由程序员完成。
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

C++面向对象程序设计第2~6章 C++对C的扩充

C++面向对象程序设计第2~6章 C++对C的扩充
蚌埠学院计算机系
9
C++面向对象程序设计
此程序从理论上说是不符合语法规则的(因此编译后, 出现了两个警告性提示),因为参数类型不匹配。应该 根据参数类型,分别写出针对int参数的max1函数和针 对float参数的max2函数,改后的程序为: #include <iostream.h> int max1(int x,int y) {int z; z = (x>y?x:y); return z; } float max2(float x,float y) {float z; z = (x>y?x:y); return z; } void main() {int a,b; float c,d; cin>>a>>b>>c>>d; cout<<max1(a,b)<<endl; cout<<max2(c,d)<<endl; }
蚌埠面向对象程序设计
2.重载函数的区分 重载函数的区分是以函数参数来进行的,而不是用函数的
返回值来区分不同的函数,所以参数表完全相同而返回值
不同的两个同名函数在C++中不认为是重载,而判定为错 误的定义。 3.不要让功能不同的函数进行重载 重载函数的设计是为了让具有相似功能的操作具有相同的 名字,从而提高程序的可读性,而如果让完全没有相似功 能的函数进行重载,就失去了本来的目的。
蚌埠学院计算机系
3
C++面向对象程序设计

在C++中,输入流 cin是从键盘到计算机的信息流 (包括控制符)。输出流cout 是从计算机到显示 器的信息流(包括控制符)。

c语言递增函数 -回复

c语言递增函数 -回复

c语言递增函数-回复C语言递增函数是一种重要的编程概念和技巧,广泛应用于各种软件开发项目中。

递增函数可以帮助我们在程序执行过程中按照固定的规律递增某个变量的值。

在本篇文章中,我将详细介绍递增函数的定义、用法以及一些常见的应用场景。

首先,让我们来了解一下递增函数的基本概念。

递增是指逐渐增加或扩大某个量的过程。

在C语言中,递增函数可以通过递增操作符"++"来实现。

递增函数的一般形式为“变量名++”或“++变量名”。

这两种形式的递增函数在使用时有一些微妙的差别,但它们的目的都是将变量的值增加1。

递增函数的使用非常简单,可以在程序的任何地方使用。

当递增函数被调用时,它会将变量的值加1,并且将新的值赋给变量。

下面是一个简单的例子:c#include <stdio.h>int main() {int num = 5;printf("初始值: d\n", num);num++;printf("递增后的值: d\n", num);return 0;}在上面的例子中,我们定义了一个整型变量num,并初始化为5。

然后,我们调用递增函数“num++”,将num的值递增1。

最后,我们使用printf 函数输出递增后的值。

运行这个程序,将会看到以下输出:初始值: 5递增后的值: 6可以看到,递增函数成功地将num的值从5增加到了6。

递增函数不仅可以用于整型变量,还可以用于字符型变量和浮点型变量。

例如,我们可以使用递增函数对一个字符进行递增操作:c#include <stdio.h>int main() {char c = 'A';printf("初始值: c\n", c);c++;printf("递增后的值: c\n", c);return 0;}在这个例子中,我们定义了一个字符型变量c,并将其初始化为字符'A'。

c语言递增函数 -回复

c语言递增函数 -回复

c语言递增函数-回复C语言递增函数是一种非常重要的编程概念,通过它我们可以实现对变量值的自增操作。

递增函数在C语言中的实现非常简单,但却能广泛应用于各种编程场景中。

在本文中,我们将一步一步回答关于C语言递增函数的问题,并深入探讨其原理和应用。

1. 什么是递增函数?递增函数是一种能够对变量进行增加操作的函数,也可以理解为自增函数。

它能够使变量的值在之前的基础上加上一个特定的增量,并将结果赋值给该变量。

2. 如何在C语言中实现递增函数?在C语言中,递增函数通常使用递增运算符(++)来实现。

递增运算符有两种形式:前置递增和后置递增。

前置递增首先将变量的值加1,然后返回递增后的值;后置递增先返回变量的值,然后再将其加1。

3. 递增函数的语法格式是怎样的?递增函数可以作为独立的语句使用,也可以作为表达式的一部分。

其通用的语法格式如下:variable++;++variable;其中,variable表示待增加的变量。

4. 递增函数的使用有哪些注意事项?递增函数虽然简单易用,但在使用时需要注意以下几点:- 在使用递增函数时,要确保变量的类型是可递增的,例如整数类型、浮点数类型等。

对于其他类型的变量,如字符类型、指针类型等可能会导致不可预期的结果。

- 在使用后置递增时要注意先后顺序,因为递增函数的返回值是先前的变量值。

比如在表达式中使用`value++`和`++value`会产生不同的结果。

- 要注意递增函数的嵌套使用,避免出现意想不到的结果。

例如,`value = ++i++`这样的表达式编译器将会产生错误。

5. 递增函数的应用场景有哪些?递增函数在实际编程中有广泛的用途,主要包括以下几个方面:- 循环控制:在循环中,递增函数常常用于迭代变量的增加,例如使用`i++`来实现循环索引的自增。

- 数组和指针操作:递增函数可以用于遍历数组和指针的元素,通过`array++`或`pointer++`来递增数组或指针的位置。

c语言递增函数 -回复

c语言递增函数 -回复

c语言递增函数-回复C语言递增函数,是指在程序执行过程中不断增加变量的值的函数。

递增函数可以用来实现循环、计数以及构建数据结构等各种功能。

在C语言中,递增函数通常通过使用自增运算符(++)来实现。

本文将一步一步回答关于C语言递增函数的相关问题,以帮助读者更好地理解和使用递增函数。

1. 什么是递增函数?递增函数是指在程序执行过程中不断增加变量的值的函数。

在C语言中,递增函数通常使用自增运算符(++)来实现。

这个运算符可以使变量的值增加1,递增函数可以通过反复使用自增运算符,实现对变量的循环增加。

2. 如何使用递增函数?使用递增函数很简单,只需要在变量后面加上自增运算符(++)即可。

例如,如果我们定义了一个整型变量i,并希望每次执行递增函数时,i的值增加1,那么就可以使用如下代码:cint i = 0;i++; 自增函数在这个例子中,i的初始值为0,然后通过递增函数i++,i的值增加1。

所以,i的最终值为1。

3. 递增函数的应用场景有哪些?递增函数在很多场景中都有广泛的应用。

其中一种常见的应用场景是在循环中使用递增函数来实现计数功能。

例如,我们可以使用递增函数来控制循环的次数,从而实现一定次数的重复操作。

另外,递增函数也可以用来构建数据结构,例如链表和数组等。

4. 递增函数与自增运算符的关系是什么?递增函数和自增运算符(++)是密切相关的。

实际上,递增函数就是通过使用自增运算符来实现的。

自增运算符可以放在变量的前面(前++)或后面(后++),它们的主要区别是他们被计算的时机不同。

前++表示先增加变量的值,然后使用这个增加后的值;后++表示先使用变量的值,然后再增加这个值。

例如,如果我们定义了一个整型变量i,并希望在计算前先增加1,那么可以使用前++(++i);如果我们希望先使用变量的值,然后再增加1,那么可以使用后++(i++)。

5. 递增函数的优缺点是什么?递增函数具有简单、方便、灵活等优点。

它们可以通过一行简单的代码实现对变量的循环增加,非常方便实用。

10.14 实验二 C++对C的扩充

10.14 实验二 C++对C的扩充

实验二C++对C的扩充一、实验目的1.了解在面向过程程序设计中C++对C语言的扩充与增强,并善于在编写程序过程中应用这些新的功能。

2.进一步熟悉在所用的VC++集成开发环境下编辑、编译、连接和运行C++程序的方法。

3.进一步熟悉C++程序的结构和编程方法。

二、实验环境硬件环境:PC586以上;操作系统:Windows2000;系统软件:Visual C++6.0三、实验内容1.输入以下程序,进行编译,观察编译结果,如果有错误,请修改程序,再进行编译,直到没有错误,然后进行连接和运行,并分析运行结果。

#include<iostream>//包含头文件命令using namespace std;//使用名字空间stdint main(){int a,b;//定义两个变量a和bcout<<"Please input to a and b:"<<endl;//输出提示信息到屏幕cin>>a>>b;//等待用户从键盘输入数据cout<<"Max="<<max(a,b)<<endl;//输出结果信息至屏幕return0;//主函数返回0至操作系统}int max(int x,int y){return(x>y)?x:y;}//求两个数中的大者的函数2.编写一个函数,用来求2个或3个正整数中的最大数,并在主函数中调用此函数。

(1)用不带默认参数的函数实现。

(2)用带默认参数的函数实现。

对比两种方法,分析使用带默认参数的函数的优点和应用场合。

总结如何选择默认参数的值。

请分析本题中默认参数的值应该在什么范围选取。

3.编写一个函数,用来实现对3个数按由小到大的顺序排序,并在主函数中调用此函数。

要求函数的形参用以下两种形式实现:(1)使用指针形参。

(2)使用引用形参。

4.编写程序,用同一个函数名实现n个数据的升序排序,数据类型可以是整型、单精度型、字符串型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2015年6月21日11时23分
3
第2讲 C++对C的函数的扩充及使用
2.3 授课重点
1.函数的声明、定义及调用; 2.函数重载的方法。
2.4 授课难点
1.函数的嵌套和递归调用; 2.函数模板。
2015年6月21日11时23分
4
1.函数的声明
一个C程序是由若干个函数组成的。 C++面向过程的程序设计沿用了C语言使用函数的方 法。 在C++面向对象的程序设计中,主函数以外的函数大 多是被封装在类中的。主函数或其他函数可以通过 类对象调用类中的函数。
2015年6月21日11时23分 28
7.有默认参数的函数
一般情况下,在函数调用时形参从实参那里取得值, 因此实参的个数应与形参相同。 有时多次调用同一函数时用同样的实参,C++提供 简单的处理办法,给形参一个默认值,这样形参就 不必一定要从实参取值了。
2015年6月21日11时23分
29
7.有默认参数的函数
2015年6月21日11时23分
2
第2讲 C++对C的函数的扩充及使用
2.2 授课要求
1.掌握函数定义的格式,掌握函数原型声明及函数 调用; 2.掌握函数调用过程中参数传递的原理及有默认参 数的函数调用; 3.掌握全局变量和局部变量的使用; 4.掌握函数重载的方法; 5.掌握保留字inline的含义与使用; 6.熟悉函数模板。
2015年6月21日11时23分 11
3.函数的调用
B. 函数表达式 函数出现在一个表达式中,这时要求函数带回一个确 定的值以参加表达式的运算。 比如:c=2*max(a,b); C. 函数参数 函数调用作为一个函数的实参。 比如:m=max(a,max(b,c)); //max(b,c)是函数调用,其值作为外层max函数调用 的一个实参
2015年6月21日11时23分 14
5.函数的重载
(1)函数的重载的含义 C++允许用同一函数名定义多个函数,这些函数的 参数个数和参数类型不同。这就是函数的重载 (function overloading)。 在编程时,有时我们要实现的是同一类的功能,只 是有些细节不同。
2015年6月21日11时23分
2015年6月21日11时23分 12
4.内置函数
调用函数时需要一定的时间和空间的开销。 图2表示函数调用的过程。
图2表示函数调用的过程
2015年6月21日11时23分 13
4.内置函数
C++提供一种提高效率的方法,即在编译时将所调用 函数的代码直接嵌入到主调函数中,而不是将流程 转出去。 (1)内置函数定义,这种嵌入到主调函数中的函数 称为内置函数(inline function),又称内嵌函数。 (2)声明格式:只需在函数首行的左端加一个关键 字inline即可。 比如:inline int max(int x,int y); 内置函数节省了时间开销,但需要更多的空间。
比如:有一函数声明 float area(float r=6.5); 指定r的默认值为6.5,如果在调用此函数时,确认r的 值为6.5,则可以不必给出实参的值,如: area( ); //相当于area(6.5); 如果不想使形参取此默认值,则通过实参另行给出。 如:area(7.5); //形参得到的值为7.5,而不是6.5 这种方法比较灵活,可以简化编程,提高运行效率。
2015年6月21日11时23分
17
5.函数的重载
#include <iostream> using namespace std; int main( ) {int max(int a,int b,int c); //函数声明 double max(double a,double b,double c); //函数声明 long max(long a,long b,long c); //函数声明 int i1,i2,i3,i; cin>>i1>>i2>>i3; //输入3个整数 i=max(i1,i2,i3); //求3个整数中的最大者 cout<<″i_max=″<<i<<endl; double d1,d2,d3,d; cin>>d1>>d2>>d3; //输入3个双精度数 d=max(d1,d2,d3); //求3个双精度数中的最大者 cout<<″d_max=″<<d<<endl; long g1,g2,g3,g; cin>>g1>>g2>>g3; //输入3个长整数 g=max(g1,g2,g3); //求3个长整数中的最大者 cout<<″g_max=″<<g<<endl; }
2015年6月21日11时23分
10
3.函数的调用
(1)函数调用的一般形式 函数名([实参表列]) (2)函数调用的方式 按函数在语句中的作用来分,可以有以下3种函数调 用方式: A. 函数语句 把函数调用单独作为一个语句,并不要求函数带回一 个值,只是要求函数完成一定的操作。 比如:printstar( );
2015年6月21日11时23分
7
1.函数的声明
例如: int max(int x,int y) //函数首部,函数值为整型,有两个整型形参 { int z; //函数体中的声明部分 z=x>y?x:y; //将x和y中的大者的值赋给整型变量z return (z); //将z的值作为函数值返回调用点 } C++要求在定义函数时必须指定函数的类型(即函数 返回值类型)。
2015年6月21日11时23分
25
6.函数模板
定义函数模板的一般形式为 : template < typename T> 通用函数定义 或 template <class T> 通用函数定义
类型参数可以不只一个,可以根据需要确定个数。 如: template <class T1,typename T2>
2015年6月21日11时23分 8
1.函数的声明
注意: 在C++中,如果函数调用的位置在函数定义之前, 则要求在函数调用之前必须对所调用的函数作函数 原型声明,这是强制性的(C语言是建议性的)。
2015年6月21日11时23分
9
2.形式参数和实际参数
在调用函数时,大多数情况下,函数是带参数的。 (1)形式参数:在定义函数时函数名后面括号中的 变量名称为形式参数(formal parameter,简称形 参)。 (2) 实际参数:在主调函数中调用一个函数时,函 数名后面括号中的参数(可以是一个表达式)称为实 际参数(actual parameter,简称实参)。
图1 函数调用的示意图。
图1
2015年6月21日11时23分
5
1.函数的声明
函数声明的格式 : 函数类型 函数名(参数表);
比如:int max(int x,int y); void count();
无参数,返回 值也为空。
2015年6月21日11时23分 6
1.函数的声明
定义函数格式
类型标识符 函数名(形式参数表列) {声明部分 语句 }
2015年6月21日11时23分
20
5.函数的重载
long max(long a,long b,long c) //定义求3个长整数中的最大者的函数 {if(b>a) a=b; if(c>a) a=c; return a; }
2015年6月21日11时23分
21
5.函数的重载
运行情况如下: 185 -76 567↙ (输入3个整数) 56.87 90.23 -3214.78↙ (输入3个实数) 67854 -912456 673456↙ (输入3个长整数) i_max=567 d_max=90.23 g_max=673456 (输出3个整数的最大值) (输出3个双精度数的最大值) (输出3个长整数的最大值)
2015年6月21日11时23分
24
6.函数模板
(1)函数模板(function template)的含义 所谓函数模板,实际上是建立一个通用函数,其函数 类型和形参类型不具体指定,用一个虚拟的类型来 代表。这个通用函数就称为函数模板。 凡是函数体相同的函数都可以用这个模板来代替, 不必定义多个函数,只需在模板中定义一次即可。 在调用函数时系统会根据实参的类型来取代模板中 的虚拟类型,从而实现了不同函数的功能。
2015年6月21日11时23分 26
6.函数模板
例P14的1.8 将例1.6程序改为通过函数模板来实现。 #include <iostream> using namespace std; template<typename T> //模板声明,其中T为类型参数 T max(T a,T b,T c) //定义一个通用函数,用T作虚拟的类型名 {if(b>a) a=b; if(c>a) a=c; return a; }
2015年6月21日11时23分
参数个数不同
23
5.函数的重载
注意: (1)重载函数的参数个数、参数类型或参数顺序3者 中必须至少有一种不同; 函数返回值类型可以相同也可以不同。 (2)在使用重载函数时,同名函数的功能应当相同 或相近,不要用同一函数名去实现完全不相干的功 能,虽然程序也能运行,但可读性不好,使人莫名 其妙。
2015年6月21日11时23分
22
5.函数的重载
上例3个max函数的函数体是相同的,其实重载函数并 不要求函数体相同。 重载函数除了允许参数类型不同以外,还允许参数的 个数不同。 参见教材P13的例1.7
相关文档
最新文档