• 第七章 函数(后续)


    1.主函数的形参:int main(int argc, char *argv[]){};第二个形参argv[]是一个C风格字符串数组,第一个形参argc则用于传递该数组中字符串的个数。

    2.return 语句:

      (1).返回引用时:当返回的是引用类型的时候,没有复制返回值。相反,返回的是对象本身,不是对象的副本。例如:

        const  string& manip(const string&  s1, const string&  s2 )

        {

           return s1.size()<s2.size()?s1:s2; 

         } 形参和返回类型都是指向const string 对象的引用,调用函数和返回结果时,都没有复制这些string对象。

      (2).千万不要返回局部对象的引用(和指针):当函数执行完毕时,将释放分配给局部对象的存储空间。此时,对拒不对象的引用就会指向不确定的内存。例如:

         const string& manip(const string& s)

          {

              string ret=s;

              return ret;

            }这个函数会在运行时出错,因为它返回了局部对象的引用。

      (3).引用返回左值:返回引用的函数返回一个左值。因此,这样的函数可用于任何要求使用左值的地方:例如:

          char &get_val(string  &str ,string::size_type ix)

            {

              return str[ix];

              }

          int main()

          {

            string s("a  value");

            cout<<s<<endl;

            get_val(s,0)='A';//在这里作为左值使用

            cout<<s<<endl;

            return 0;

           }

        如果不希望引用返回值被修改,返回值应该声明为const:

          const char &get_val(...)

    3.递归:int faction(int  val)

        {

          if(val>1)return faction(val-1)*val;

          return 1;

        }

    4.默认实参:string screenInit(string::size_type height,string::size_type width=50);记住一点即可:默认实参是放在形参表的最后。

    5.内联函数:内联函数是在返回类型前面加上关键字inline。如:inline const  string& shorterstring(const string &s1,const string &s2){}

    内联函数能够在程序中每个调用电内联地展开,是为了消除函数在调用的时候的额外执行开销。内联函数一般放在头文件中。

    6.类成员函数:调用成员函数是使用对象来调用。

    (1)this指针:每一个成员函数都有一个额外的、隐含的形参this。在调用成员函数时,形参this初始化为调用函数的对象的地址。

    (2)const成员函数的引入:跟在成员函数声明的形参表后面的const所起的作用是:const改变了隐含的this形参的类型。如:bool Sale_item::same_isbn(const Sale_item *const this ,const Sale_item &rhs) const  {} 使用这种方式的const的函数称为常量成员函数。由于this是指向const对象的指针,const成员函数不能修改调用该函数的对象。也就是说在调用的时候不能修改他们的对象的数据成员。

    (3)指针this:在成员函数的调用时,指针this实际上是指向被调用函数所属对象的数据成员

    7.重载函数:出现相同作用域的两个函数,如果具有相同的名字而形参表不相同,则称为重载函数。

    8.指向函数的指针:函数指针是指指向函数而非指向对象的指针。像其他的指针一样,函数指针也指向某一个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关。如:bool  (*pf)(const string &,const string &)这个语句将pf声明为指向函数的指针,它所指向的函数带有两个const string &类型形参和bool类型的返回值。

    (1)用typedef简化函数指针的定义:函数指针类型相当的冗长。使用typedef为指针类型定义同义词。可将函数指针的使用大大简化:

      typedef  bool (*cmpFcn)(const  string &,const  string &)

    该定义表示cmpFcn是一种指向函数的指针类型的名字。在要使用这种函数指针类型时,只需要直接使用cmpFcn即可,不必每次都要把整个类型声明全部写出来。

    (2)在初始化函数指针时,必须返回类型和形参表的类型都完全一致。如:

    typedef  bool (*cmpFcn)(const  string &,const  string &);

    bool  lengthcompare(const string &,const string &);

    cmpFcn pf=lengthcompare;将这个函数的指针指向lengthcompare函数。

  • 相关阅读:
    第四章 方法(4.2 方法的嵌套调用)
    C#利用for循环打印图形练习题
    第三章 C#程序结构 (3.3 循环结构)
    第六章 数组和索引器 (6.6 索引器)
    第五章 类与对象 5.2 猫类(案例二)
    第五章 类与对象 5.1 时间类(案例一)
    第三章 C#程序结构[3.2 选择结构的应用(Windows窗体应用程序)(四)]
    第三章 C#程序结构(3.1 顺序与选择结构)
    第二章 C#语法基础 (2.2 C#语言的运算符和表达式)
    第二章 C#语法基础(2.1C#语言的数据类型二)
  • 原文地址:https://www.cnblogs.com/ljy2013/p/3287959.html
Copyright © 2020-2023  润新知