码迷,mamicode.com
首页 > 其他好文 > 详细

第九章

时间:2018-06-11 00:36:16      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:函数定义   引入   默认   lock   loaded   别名   不同   amp   操作   

overloaded function: 函数名相同,在相同的域中声明,参数表不同

重载函数声明

  • overloading function: 允许多个函数共享同一个函数名,针对不同的参数类型提供不同的操作

    程序设计的一种局限性:同一个域中出现的名字必须指向一个唯一实体(唯一的对象,函数,class类型等)

  • 如果两个函数的参数表相同,但是返回类型不同,则第二个声明被视为第一个声明的错误重复,产生编译错误。
  • 如果两个函数的参数表中,只有默认实参不同,认为是重复声明

    int max( int ia, int sz );
    int max( int
    , int = 10);

  • 当一个参数类型是const或者volatile的时候,在识别函数声明是否相同时,并不考虑const和voliatile修饰符

    void f( int );
    void f( const int ); 两者相同

  • 参数是const只跟函数定义有关,函数体内的表达式不能改变参数的值。
  • 如果把const和volatile应用在指针或者引用参数指向的类型上,则在判断函数声明时需要考虑const和volatile修饰符。

    void f( int * ) 与 void f( const int * ) 声明了不同的函数
    void f( int & ) 与 void f( const int & ) 声明了不同的函数
    void f( int ) 与 void f( const int ) 声明了相同函数

  • 重载函数集合中的所有函数都应在同一个域中声明,一个声明为局部的函数将隐藏而不是重载一个全局域中声明的函数
  • 不是同一个域中的函数,同名函数被隐藏。
  • 函数重载:同一域中,函数名相同,参数表不同,返回类型相同
  • 函数覆盖:不同域中,函数名相同

    void print( const string &);
    void print( doubel );
    void foo( int val )
    {
    extern void print( int ); //独立的域,隐藏print()的两个实例
    print("hello"); // 错误,在这个域中被隐藏了
    print(val);
    }

  • 可以在一个类中声明一组重载函数,每个类都维持自己的一个域,不同的类的成员函数不能重载
  • 可以在同一个名字空间声明一组重载函数

  • using声明和using指示符可以使一个名字空间的成员在另一个名字空间中可见
  • using声明不能为一个函数指定参数表,只能使用参数名,根据实参类型重载。即using声明总是为重载函数集合的所有函数声明别名
  • using声明只是一个声明,由using声明引入的函数就好像在该声明出现的地方被声明一样。using声明不能向一个域中引入同样名字和参数表的声明

  • using指示符:使名字空间成员就像在名字空间之外被声明的一样。using指示符把所有声明加入到当前名字空间被定义的域中。
  • 同一重载函数集合中的函数都是在同一个域中被声明的,即使这些声明可能是用using声明或者using指示符引入的

第九章

标签:函数定义   引入   默认   lock   loaded   别名   不同   amp   操作   

原文地址:https://www.cnblogs.com/person3/p/9164756.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!