C++语言程序设计基础课程笔记03

本文将介绍 C++ 中 函数的通常用法。函数又称为方法,是一段程序代码。由三部分组成,函数声明,函数定义 和 函数体。python

  • 函数定义包含函数返回值,函数名 和 形式参数(形参)列表
  • 函数体中是一些语句。
  • 函数声明, 写法和函数定义差很少,可是没有函数体。一般能够缺省,可是若是被调用,但函数定义尚未出现,须要在调用以前书写函数声明

例如:ios

// 函数声明
int add(int a, int b);

// 返回值, 函数名, 形参列表
int add(int a, int b) {
// 函数体
    return a + b;
}

调用是能够被调用的, 调用时须要提供实际参数(实参)列表。c++

这里常量“cpp” 就是实参, name 就是形参算法

#include <iostream>
#include <string>
using namespace std;

int hi(string name) {
    cout << "hi" << name << endl;
}
int main() {
    cout << "1" << endl;
    hi("cpp");
    cout << "2" << endl;
}

语句按照顺序执行,遇到函数先执行函数内部,返回以后继续执行。编程

和大多数程序同样,函数能够嵌套,函数中又能够调用其余的函数。函数

而函数调用自身,称为递归,编写算法的时候常常使用递归。优化

unsigned fib(unsigned int n) {
    if (n == 1) {
        return 1;
    }
    if (n == 2) {
        return 1;
    }
    return fib(n - 2) + fib(n - 1);
}

一般递归须要退出条件。spa

下面介绍一些要点 和特性, 实参形参和引用、constexpr、默认参数、函数重载code

关于形参和实参,实参就是调用的时候填写的参数,当执行调用的时候,会发生实形结合。实形结合,就是形参会被分配内存空间,而且实参的值会传递给形参。定义的时候形参不占用内存空间。递归

参数传递有两种:

  • 单项传递,也就是传值,这样函数内若是须要改变实参,就不行的,由于不在一个内存空间。那么须要经过双向传递来实现,
  • 双向传递,就是传引用,须要把形参的类型设置为引用类型,那么实形结合的时候,会把形参的引用和实参的数据绑定,这个绑定关系不会改变,而且形参不占用内存空间。

引用 不是变量,是变量的别名,不占用内存空间,写法以下:

#  类型& 是一个引用类型

void swap(int& a, int& b) {
    int tmp = a;
    a = b;
    b = tmp;
}
int main() {
    int x = 1;
    int y = 2;
    swap(x, y);
    cout << "x = " << x << ",y = " << y << endl;
}

那么 a 是一个引用类型 和 实参x的数据进行绑定,是x 的别名,经过双向传递,能够改变实参的值。

constexpr 是 c++ 中的一个关键字,能够添加到函数的定义或者声明开头,这个语法是一个比 const 更严格的语法

  • 要求函数体的全部参数是 constexpr 时,返回值也是 constexpr
  • 函数中只能有return语句

有什么用呢,总结来讲,就是 constexp r要求编译时不可变(而 const 只是运行时不可变,编译时有可能值尚未肯定,仍是变量),即在编译时能够推导出来,这样严格约束,一方面描述这是一个常量表达式, 另一方面能够在编译时进行优化。

默认参数,这个在python中是支持的,C++ 的写法相似,容许设置默认的参数,这样在调用时能够不提供某些实参,可是默认参数须要从右到左提供,不用都提供。例如:

int test1(int a , int b = 1, int c = 2); // ok

int test2(int a = 1, int b ) // error

若是函数声明中已经写了默认参数,函数定义中就不用写默认参数了。

函数重载(overload),是指一个相同名称的函数,经过参数数量和参数类型的不一样,有多个版本的功能。例如:

int add(int a , int b);
double add(double a, double b);

须要注意的,重载是不支持返回值类型不一样的。(由于隐式类型转换的存在,可能引发歧义)。虽说好处的是能够用同一个方法名,反复使用,而不用使用addInt addDouble这样的名称。对于使用函数的人来讲,须要注意的是,因为使用的参数不一样,须要肯定其实是调用哪一个方法。

总之,函数是编程中随处可见的操做,C++ 须要注意的就是参数传递和函数声明。

相关文章
相关标签/搜索