默认参数的函数

1.默认参数的目的

  C++可以给函数定义默认参数值。通常,调用函数时,要为函数的每个参数给定对应的实参。例如:
    void delay(int loops); //函数声明
    void delay(int loops) //函数定义
    {
     if(100ps==0)
      return;
      for(int i=0;i<loops,i++);
    }
  无论何时调用delay()函数,都必须给loops传一个值以确定时间。但有时需要用相同的实参反复调用delay()函数。C++可以给参数定义默认值。如果将delay( )函数中的loops定义成默认值1000, 只需简单地把函数声明改为:
    void delay(int loops=1000); 
  这样,无论何时调用delay()函数,都不用给loops赋值,程序会自动将它当作值1000进行处理。例如,调用:
    delay(2500); //loops设置为2500
    delay(); //ok:loops采用默认值1000
  调用中,若不给出参数,则按指定的默认值进行工作。
  允许函数默认参数值,是为了让编程简单,让编译器做更多的检查错误工作。

2.默认参数的声明

  默认参数在函数声明中提供,当又有声明又有定义时,定义中不允许默认参数。如果函数只有定义,则默认参数才可出现在函数定义中。例如:
    void point(int=3,int=4); //声明中给出默认值
    void point(intx,inty) //定义中不允许再给出默认值
    {
     cout <<x<<endl;
     cout <<y<<endl;
    }

3.默认参数的顺序规定

  如果一个函数中有多个默认参数,则形参分布中,默认参数应从右至左逐渐定义。当调用函数时,只能向左匹配参数。例如:
    void func(int a=1,int b,int c=3, int d=4); //error
    void func(int a, int b=2,int c=3,int d=4); //ok
  对于第2个函数声明,其调用的方法规定为:

    func(10,15,20,30); //ok:调用时给出所有实参
    func(); //error:参数a没有默认值
    func(i2,12); //ok:参数c和d默认
    func(2,15,20); //error:只能从右到左顺序匹配默认

4.默认参数与函数重载

  默认参数可将一系列简单的重载函数合成为一个。例如, 下面3个重载函数:
    void point(int,int){//...}
    void point(int a){return point(a,4);}
    void point(){return point(3,4);}
  可以用下面的默认参数的函数来替代:
    void point(int=3,int=4);
  当调用“point();”时,即调用“point(3,4);” 它是第3个声明的重载函数。
  当调用“point(6);”时,即调用“point(6,4);”,它是第2个声明的重载函数。
  当调用“point(7,8);”时,即调用第1个声明的重载函数
  如果一组重载函数(可能带有默认参数)都允许相同实參个数的调用,将会引起调用的二义性。例如:
    void func(int); //重载函数之一
    void func(int,int=4); //重载函数之二,带有默认参数
    void func(int=3,int=4); //重载函数之三,带有默认参数

    func(7); //error: 到底调用3个重载函数中的哪个?
    func(20,30) //error:到底调用后面2个重载函数的哪个?

5.默认值的限定

  默认值可以是全局变量、全局常量,甚至是一个函数。例如:
    int a=1;
    int fun(int);
    int g(int x;fun(a)); //ok:允许默认值为函数
  默认值不可以是局部变量,因为默认参数的函数调用是在编译时确定的,而局部变量的位置与值在编译时均无法确定。例如:
    void fun()
    {
     int i;
     void g(int x=i); //error:处理g()函数声明时,i不可见
    }

本章小结

  随着程序量和程序复杂度的不断增加,最好的办法是把程序分成更小,更容易管理的模块,这种模块就是函数。
  函数名最好能反映出所要完成的任务。
  函数可以把数据返回给调用者,若函数要返回一个值,必须在函数名前规定返回值的类型,若函数没有返回值,则类型为void。
  程序通过参数把信息传递给函数,若函数需要接受参数,就必须给参数指定名称及类型。
  C++必须知道函数的返回类型以及接受的参数个数和类型, 如果函数的定义出现在函数调用之后,就必须在程序的开始部分用函数原型进行声明。
  局部变量是在函数内部定义的,只能被定义该变量的函数访问。全局变量是指其作用域贯穿程序始终的变量。定义全局变量要在程序开始时进行,并且放在所有函数的外面。
  静态局部变量是在函数内部定义,但生命期却随函数的第一次被调用而产生, 随程序的结束而结束, 静态局部变量只能在定义该变量的函数中可见。
  函数调用机制是由栈操作的过程实现的。函数可以递归调用。函数定义不能放在任何函数定义的里面。
  内联函数是为了提高编程效率而实现的, 它克服了用#define宏定义所带来的弊病。
  函数重载允许用同一个函数名定义多个函数。连接程序会根据传递给函数的参数数目、类型和顺序调用相应的函数。函数重载使程序设计简单化,程序员只要记住一个函数名,就可以完成一系列相关的任务。
  在函数定义中通过赋值运算,即可指定默认参数值。一旦程序在调用函数时默认了参数值, 函数就使用默认参数值。 不允许在参数中间使用默认值。指定默认参数值可以使函数的使用更为简单,同时也增强了函数的可重用性。

默认参数的函数

时间: 2024-12-10 07:05:38

默认参数的函数的相关文章

sdut 面向对象程序设计上机练习三(有默认参数的函数)

面向对象程序设计上机练习三(有默认参数的函数) Time Limit: 1000MS Memory limit: 65536K 题目描述 利用默认参数的函数实现求2个或3个整数的最大值. 输入 输入3个int型整数. 输出 输出第1.2个整数及其最大值: 输出第1.2.3个整数及其最大值. 示例输入 88 66 99 示例输出 88 66 88 88 66 99 99 既然题目要求是调用默认的函数,就不用自己去定义了: 机智灵活的运用默认函数.. #include <iostream> usi

C++函数:默认参数的函数

1.默认参数的目的 C++可以给函数定义默认参数值.通常,调用函数时,要为函数的每个参数给定对应的实参.例如: void delay(int loops); //函数声明 void delay(int loops) //函数定义 { if(100ps==0) return; for(int i=0;i<loops,i++); } 无论何时调用delay()函数,都必须给loops传一个值以确定时间.但有时需要用相同的实参反复调用delay()函数.C++可以给参数定义默认值.如果将delay(

c++有默认参数的函数---4

原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 1.默认参数的目的 C++可以给函数定义默认参数值.通常,调用函数时,要为函数的每个参数给定对应的实参.例如: void delay(int loops): //函数声明 void delay(int loops) //函数定义 { if(100ps==0) return: for(int i=0;i<loops,i++): } 无论何时调用delay()函数,都必须给loops传一个值以确定时间.但

[C++程序设计]有默认参数的函数

实参与形参的结合是从左至右顺序进行的.因此指定默认值的参数必须放在形参表列中的最右端,否 则出错.例如: void f1(float a,int b=0,int c,char d=′a′); //不正确 void f2(float a,int c,int b=0, char d=′a′); //正确 在调用有默认参数的函数时,实参的个数可以与形参的个数不同,实参未给定的,从形参的默认值得到值 1 #include <iostream> 2 using namespace std; 3 4 in

PHP_零基础学php_3PHP函数、传参函数、默认参数、函数返回值

<?php function say_hello() //无参数 { $name="tang"; echo "hello,".$name; echo "<br />"; echo "<hr />"; } say_hello();//函数调用 function say_helloS($some_name)//有参数 { echo "hello,".$some_name; echo

内联函数、默认参数和函数占位参数

内联函数 定义:内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质.内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处.编译时,类似宏替换,使用函数体替换调用处的函数名.一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理. C++中的const常量可以替代宏常数定义,如: const int A = 3; ? #define A 3 C++中是否有解决方案替代宏代码片段呢?(替代宏代码片段就可以避免宏的副作用!) C++

重载函数和默认参数的函数

代码说事 重载的参数匹配 1 /// *重载的匹配顺序 1: 严格匹配 2: 转换匹配 2 /// *重申 : 重载的判断依据 !形参的! 个数 类型 位置 3 /// * 返回值类型不作为重载依据 4 /// * 默认参数 不能用于区分重载函数 5 6 #include <bits/stdc++.h> 7 using namespace std; 8 9 /// 转换 的匹配 10 double b; 11 void print(int a); 12 void print(char c);

默认参数与函数重载

一.默认参数在C++中,可以为参数指定默认值.在函数调用时没有指定与形参相对应的实参时, 就自动使用默认参数. 默认参数的语法与使用:(1)在函数声明或定义时,直接对参数赋值.这就是默认参数:(2)在函数调用时,省略部分或全部参数.这时可以用默认参数来代替. 注意:(1)默认参数只可在函数声明中设定一次.只有在无函数声明时,才可以在函数定义中设定.(2)默认参数定义的顺序为自右到左.即如果一个参数设定了缺省值时,其左边的参数都要有缺省值.如:int mal(int a, int b=3, int

C++自学-默认参数的函数

在调用函数时,可以不用或使用部分参数调用,不指定的值为函数默认值 #include "stdafx.h" #include <Windows.h> #include <iostream> #include <fstream> #include <shappmgr.h> #include <stdio.h> #include <cmath> using namespace std; int add(int a = 2