>[info] # 函数的重载
## **重载的需要性**
在不同类型上做类似运算而又用相同名字的情况称为**重载 (function overloading)**,即重新定义语义.
~~~
//重载前:
int abs(int);
long fbs(long);
double lbs(double);
//重载后
int abs(int);
long abs(long);
double abs(double);
~~~
**重载解析**:C++用一种函数命名技术可以准确判断应该调用哪个重载函数.
~~~
abs(10) //调用int abs(int)
abs(100000000000) //调用long abs(long)
abs(10.000000000) //调用double abs(double)
~~~
## **使用说明**
* 返回类型不能单独作为重载解析的依据;参数个数,类型,顺序三者种必须至少有一种不同.
如: void func(int);
int func(int); //error
* 不能用typedef定义的类型名来区分重载函数声明中的参数.
* 让重载执行不同的功能,是不好的编程风格.
## **例子**
~~~
void print(double);
void print(int);
void func()
{
print(1); //匹配void print(int)
printf(1.0); //匹配void print(double)
print(’a’); //匹配void print(int)
print(3.1415f); //匹配void print(double)
}
~~~
~~~
/* ***求3个数中最大的数(分别考虑整数,双精度数,长整数的情况)*** */
#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;
}
int max(int a,int b,int c) //定义求3个整数中的最大者的函数
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
double max(double a,double b,double c) //定义求3个双精度数中的最大者的函数
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
long max(long a,long b,long c) //定义求3个长整数中的最大者的函数
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
~~~
~~~
/* ***求两个整数或3个整数中的最大数*** */
#include <iostream>
using namespace std;
int main( )
{
int max(int a,int b,int c); //函数声明
int max(int a,int b); //函数声明
int a=8,b=-12,c=27;
cout<<”max(a,b,c)=”<<max(a,b,c)<<endl; //输出3个整数中的最大者
cout<<”max(a,b)=”<<max(a,b)<<endl; //输出两个整数中的最大者
}
int max(int a,int b,int c) //此max函数的作用是求3个整数中的最大者
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
int max(int a,int b) //此max函数的作用是求两个整数中的最大者
{
if(a>b) return a;
else return b;
}
~~~
- 介绍
- 编程设计语言
- 第一章 对C++的初步认识
- 1.2 最简单的C++程序
- 1.3 C++对C的补充
- 1.3.1 return
- 1.3.2 输入输出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定义常变量
- 1.3.5 函数原型声明
- 1.3.6 内置函数
- 1.3.7 函数重载
- 1.3.8 函数模板
- 1.3.9 有默认值的参数
- 1.3.10 作用域
- 1.3.11 const修饰指针
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 变量
- 1.3.15 字符串变量
- 第二章 类与对象
- 2.2 类的声明和对象的定义
- 2.3 类的成员函数
- 第三章 关于类和对象的进一步讨论
- 3.1 构造函数
- 3.1.1 对象的初始化
- 3.1.2 构造函数
- 3.2 析构函数
- 3.3调用析构函数和构造函数的顺序
- 3.4 对象数组
- 3.5 对象指针
- 3.6 共享数据的保护
- 3.7 对象的建立与释放
- 3.8 对象的赋值与复制
- 3.9 静态成员
- 3.10 友元
- 3.11 类模板
- 第四章 运算符重载
- 数据类型转换
- 运算符重载
- 重载流插入运算符和流提取运算符
- 第五章 继承与派生
- 继承与派生
- 第六章 多态性与虚函数
- 多态性
- 虚函数
- 纯虚函数与抽象类