c++ beginning(2)
来源:互联网 发布:mac ssh连接服务器 编辑:程序博客网 时间:2024/05/18 00:17
函数的重载:
大多数编程语言要求对函数名设定为唯一的一个标识符,不能重复,在c++中却允许,也就是可以定义两个一样名字的函数,这就叫做函数吃的重载:两个以上的函数,取相同的函数名,但是形参的个数和类型不同,编译器根据实参和形参的类型几个数的最佳匹配,自动决定调用那个函数:
exp:
int max(int,int);
int max(int,int,int);
float max(float,float);
double max(double,double);
带默认形参值的函数:
c++中允许在函数说明或函数定义中为形参赋予一个默认的值,这样的函数就叫做带有默认值的函数:在调用带有默认值的函数时,若为相应形参指定了实参,则形参将使用实参的值,否则,形参将使用其默认值。
exp:
int sub(int x=8,int y=3)
{
return x-y;
}
void main(void)
{
sub(20,15);//传递给形参的x,y的值分别是2015
sub(10);//传递给形参的值分别是10,3有一个使用了默认的值
sub();//传给形参的值为83都使用了默认的值
}
(1)多个实参,自右向左定义;
(2)多个实参,若省去某个实参,则知道最优断的实参都要省去(再有默认值前提)
exp:
int f(int a, float b=5.0,char c='.', int d=10);
采用如下调用则错误:
f(2,,,3)//语法错误f(2,,,)这样是对的
(3)默认形参值的说明必须出现在函数调用之前,这就是说,如果存在函数原型,则形参的默认值应该在函数原型中指定;否则在函数中定义;另外,若函数原型中已给出了形参的默认值,则在函数定义中不能重复指定,即使多指定的默认值完全相同也不行
exp:
int sub(int x=8, int y=3);//默认形参的值在函数原型中给出
void main()
{
sub(20,15);
sub(10);
sub();
}
int sub(int x, int y)
{
return x-y;
}
(4)在同一个作用域,一旦定义了默认形参值,就不能在定义它。
exp:
int f(int a, float b, char c='.', int d=10);
int f(int a,float b, char c='.',int d= 10);//错:企图在此定义默认参数c,d
(5)如果几个函数说明出现在不同的作用域 内,则允许分别为他们提供不同的默认形参值。
exp:
int f(int a=6, float b=5.0, char c=‘.’,int d=10);
void main(void)
{
int f(int a=3, float b=2.0, char c='n', int d=20);
cout <<f()<<endl;
()
}
(6)对形参默认值的指定可以使初始化表达式,甚至可以包含函数调用
exp:
int f(int a, float b=5.0, char c='.', int d=sub(20,15));
(7) 在函数原型给出了形参的默认值时,形参名可以省略
exp:int f(int,float 5.0, char =‘.’,int =sub(20,15));
函数的模板:可以用来创建一个通用功能函数,以支持多种不同形参,进一步简化重载函数的函数体设计
模板定义格式:
template <class 类名,class 类名, >
返回类型 函数名(形参表)
{
函数体;
}
exp:
template<class T>
T add(T x, T y)
{
return x+Y;
}
下面的一个函数模板的参数表中带有形式参数:
template<class T, int size>
T sum(){.......}
模板---->模板函数
显式实例化:
函数名<具体类型名,具体类型名,。。。。。,常量表达式>(实参表)
隐式实例化:
- c++ beginning(2)
- “Beginning Python”(五)“Instant Markup 2”
- Beginning C stdin pipe programming
- Beginning Spring Framework 2
- c++ beginning(1)
- c++ beginning(3)
- beginning
- BEGINNING
- beginning
- Beginning
- Beginning
- Beginning
- $beginning
- Beginning
- beginning
- Beginning
- beginning
- Beginning~
- android 和mysql的数据传输方法 求解。
- sql server基本
- 【转】强大!下一代X Window – Wayland, 今生前世之新生
- catalan数
- C#IO流详解
- c++ beginning(2)
- 顶级程序员的心得 - Coders at Work
- VS2005编译OSGGIS
- ndiswrapper 终于正常工作了
- 面向程序员的数据库访问性能优化法则
- Python的ASCII, GB2312, Unicode , UTF-8区别
- Function
- VC 2010下安装OpenCV 2.0/2.1/2.2
- 如何面试程序员?