zoukankan      html  css  js  c++  java
  • C++基础知识(2)---函数

       c++中的函数和C语言中的函数相比,增加了许多新的语法与功能。在这里总结一下c++中常用的引用函数,函数重载和内联函数。

       1  引用参数

        引用参数最常用的一个例子就是 交换 两个数,如下

     1 void swap( int &a, int &b)
     2 {
     3     int t;
     4     t = a;
     5     a = b;
     6     b = t;  
     7 }
     8 
     9 void main()
    10 {
    11      int f = 1;
    12      int s = 2;
    13      swap(f , s);
    14 }

           

         这俩个数的值被调换了。是什么原因呢?原来引用参数是利用了别名技术,在进行参数传递时,形式参数作为实际参数的别名绑定于实际参数上。函数中所进行的操作就直接在实际参数上操作。

        还有一种交换俩个数的方法就是就是利用 指针 ,在c语言中是一个非常经典的例子:

         

    1 void swap( int *a, int *b)
    2 {
    3       int t =*a;
    4        *a = *b;
    5        *b = t;
    6 }

        由于传递进来的是实际参数的地址,可以利用这个地址直接对该地址上存储的内容进行修改。因此就交换了俩个数的值。

         引用参数还有一个作用是引用返回。当程序执行到return expression 这条语句时,会先将 expression 求值,然后将这个值复制到临时存储空间,最后再将临时存储空间中的这个值返回给调用者,我们称之为传值返回。而引用返回直接将expression 求得的值返回给调用者。如:

    1 int& val()
    2 {
    3     .......
    4     return i;
    5 }
    6 int j= val();

        直接将i的值返回给j,没有经过临时存储空间。

        值得注意的是,引用返回并不能返回非static类型的局部变量。因为引用返回,返回的是一个实际的内存单元,必须保证函数结束时,该内存单元仍然存在。

      2   内联函数

        内联函数必须用 inline 关键值来声明 ,如,

    1 inline void print(string s = "hello world")

        使用内联函数的目的是减少程序调用的开销,这是因为在调用内联函数的地方,编译器都会将之替换为函数体的代码。这与宏的使用有些相似,但是宏展开式在预处理阶段进行的,不涉及语义处理。但内联函数是由编译器处理的,需要考虑到语义。另外一点是c++中的函数允许使用默认的参数,如上例中,就使用了默认的参数,当发生函数调用时,如果没有传递函数就按照默认的参数来处理。

        3 函数重载

         在讨论函数重载之前,首先介绍一下函数签名的概念:函数签名包括  函数名称,参数个数,参数类型,参数顺序。exp:

    1 int a(int f);
    2 int b(int f);

          以上俩个函数具有不同的函数签名,因为他们的名字不同。

      

    1 int a();
    2 int a(int f);

         以上俩个函数具有不同的函数签名,因为他们的参数个数相同

      

    1 int a(int f);
    2 int a(double f);

        以上俩个函数具有不同的函数签名,因为他们的参数类型不同

      

    int a(itn f ,double s);
    itn a(double s,int f);

     以上俩个函数具有不同的函数签名,因为他们参数的顺序不同

       

    1 double a(int s ,double d);
    2 void a(int dd ,double ss);

     以上俩个函数具有相同的函数签名,因为他们的函数签名相同。需要注意的是,函数的签名并不包括函数的返回值

       函数的重载存在于具有相同的函数名,具有不同的函数签名的函数之间,如下就是函数重载

    void print();
    void print(strign s);
    

      函数重载的作用主要是为一些相似的操作提供相同的函数名。

       

     

  • 相关阅读:
    UWP关于图片缓存的那些破事儿
    UWP中的文件相关操作
    数据结构-快速排序(C#实现)
    C#与Swift异步操作的差异
    Windows环境下使用Clover四叶草引导双硬盘安装OSX 10.11.5原版镜像
    Winform以任意角度旋转PictureBox中的图片的方法
    Xcode调用旧版本库出现Undefined symbols for architecture x86_64: ld: symbol(s) not found for architecture x86_64
    做WP程序时遇到的一些问题及解决方法
    WInform关闭程序的几种方法以及区别。
    显示在标题上的进度条
  • 原文地址:https://www.cnblogs.com/wyuzl/p/6179542.html
Copyright © 2011-2022 走看看