第11章 函数

来源:互联网 发布:淘宝形象模特 编辑:程序博客网 时间:2024/05/01 13:59

1、 把相关的语句组合在一起,并且赋予相应的名称,用这种方法来给程序分块,这种形式的组合就是函数,函数也叫例程或者过程。

程序总是从main()函数开始启动。

 

函数由函数名、参数、返回值类型以及一组包含操作语句的语句块组成。函数可以支持重载,程序就是由函数组成。

 

2、 形参是函数定义时在形参表中定义的,并且由调用函数时传递函数的实参所初始化。形参为函数提供了已经命名的局部存储空间。

函数形参表可以为空,但不能省略。没有任何形参的函数可以用空形参表或含有单个关键字void的形参表来表示。

 

3、C++支持函数参数个数不确定的,当不知道有多少个参数或类型只知道其中的一个或几个,可以用隐藏参数代替,不知道的用……来代替,调用时只需要处理所知道的参数。

 

4、在类声明的内部声明或定义的成员函数叫做内联函数。引入内联函数的目的是为了解决程序中函数调用的效率问题。一般来说,内联机制适用于优化小的、只有几行的而且经常被调用的函数。

 

在类声明的内部声明,而在类声明外部定义叫做显示内联函数

在类声明的内部定义,叫做隐式内联函数

注意:在内联函数内不允许用循环语句和开关语句。如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码,递归函数是不能被用来做内联函数的。内联函数只适合于只有1~5行的小函数。内联函数的定义必须出现在内联函数第一次被调用之前。

 

5、  把引用变量当成形参传递就是引用形参,由于引用变量指向的是同一个内存地址,引用传递表面上传的是变量,实际上传的是变量的地址。引用形参把对变量的操作,隐式地转成通过变量地址来对变量操作。

 

注意:调用非const类型的引用形参,实参必须不是const,而且实参的类型和形参的类型应该一致。

指针形参是指函数的参数是指针,它不会像引用形参那样通过函数调用影响实参的值,但是调用后会修改实参的对象。程序中尽量少用指针形参,这样会使程序的可读性下降。

 

6、内部,声明成员函数是必需的,而定义成员函数是可选的。在类外部定义的成员函数必须指明它们是在类的作用域中。

类成员函数分为内联函数和外联函数。内联函数是指定义在类体内的成员函数,即该函数的函数体放在类体内。而申明在类体内,定义在类体外的成员函数叫外联函数。

注意:内联函数与带参数的宏定义进行比较,它们的代码效率是相同的。但是内联函数优于宏定义,因为内联函数遵循类型和作用域规则,与一般函数更接近。

内联函数中的执行代码不能过多,如果内联函数的函数体过大,一般编译器会放弃内联方式,而采用普通的方式调用函数。

 

类内部的函数无论是否使用inline关键字,都被默认为内联函数,而外部的函数使用inline关键字定义为类的内联函数。类成员中的函数就是类的成员函数,特别的类成员函数由构造函数和析构函数。

 

7、 静态函数使用static关键字修饰的函数,静态成员函数的声明除了在类体的函数声明前加上关键static,以及不能声明为constvolatile之外,与非静态成员函数一样。静态函数只能访问静态变量。出现在类体之外的函数定义不能制定为关键字static

 

注意:静态函数没有this指针。

静态函数不能被其他文件所用,其他文件中可以定义相同名字的函数,在类中如果函数调用的结果不会访问或者修改任何对象数据成员,这样的成员声明为静态成员函数比较好。

 

8、  静态函数只能直接访问类的静态私有成员,静态函数不可以直接访问类的非静态私有成员,但是可以通过自定义的一些方法如宏定义替换访问类的非静态私有成员。(静态成员函数可以借助对象名和指针来访问类的非静态私有成员。)

注意:外部类可以使用宏定义等特殊方式来实现访问类的私有成员。

 

9、  函数重载:在相同的作用域中,具有相同的名称而形参列表不同的多个函数。通过执行同样的操作,但应用不同形参的一组函数,可以简化程序的实现,使程序更加易懂。

 

函数匹配有3种结构:

1)编译器找到与实参最佳匹配的函数,并生产调用该函数的代码;

2)编译器找不到形参与函数调用的实参匹配的函数,编译器报错

3)存在多个域实参匹配的函数,但没有一个明显的最佳选择。

 

在函数重载匹配时,先通过标准转换来实现匹配,如果不行,再通过类类型转换里实现匹配。

为确定最佳匹配,编译器将实参类型到相应形参类型转换划分等级。转换等级以降序排列如下:

1)精确匹配,实参与形参类型相同

2)通过类型提升实现的匹配

3)通过标准转换实现的匹配

4) 通过类类型转换实现的匹配

原创粉丝点击