第九章

Posted person3

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第九章相关的知识,希望对你有一定的参考价值。

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指示符引入的












以上是关于第九章的主要内容,如果未能解决你的问题,请参考以下文章

第九章 多语言环境的支持和多屏幕的适配

第九章:硬件抽象层

第九章

第九章

安卓深度探索(卷一)第九章

第九章 硬件抽象层:HAL