chdoca的个人博客分享 http://blog.sciencenet.cn/u/chdoca

博文

C++Primer学习笔记

已有 3920 次阅读 2012-5-13 00:30 |个人分类:学习心得|系统分类:科研笔记| 学习

第七章      函数(5.12

本章介绍函数的声明和定义。讨论了如何给函数传递参数以及从函数返回值。具体分析了三类函数:内联函数、类成员函数和重载函数,最后介绍了指向函数的指针。

 

知识点:

函数由返回类型、函数名、形参列表和函数体组成。函数的调用由调用操作符(即括号)实现。

函数返回类型可以使内置类型、类类型或复合类型(指针类型),还可以是void型,函数必须指定返回类型。

参数传递:

如果形参为非引用类型,则复制实参的值,否则它只是实参的别名。注意指针的传递也是复制。因此非引用传递不会改变原来实参的值(指针的复制会改变指向的值)。

对引用形参或指针形参而言,可以将非const引用或指向非const对象的指针复给const引用或指向const的指针,但不可以将const引用或指向const对象的指针赋给非const引用或指向非const的指针,这也就是为什么一般引用形参定义为const型。非const引用形参的传递非常严格,只能是相同类型(不包括可转换的类型)的左值。

 

数组形参:

数组的两个性质:不能复制以及数组名会自动转化成指向第一个元素的指针。

数组形参的第一维长度可以省略,编译器只会检查实参是否为指针以及指针类型是否匹配,不会检查数组长度。

可以讲数组形参声明为引用,如(int(&a)[10]),此时指明长度是有必要的,编译器会检查长度是否一致。数组的引用同样相当于数组的别名。

 

Return

返回类型为void型的函数可以返回另一个返回类型为void型的函数的调用结果。返回引用类型的对象同样没有复制对象,只是返回对象的别名。

 

函数声明:

函数共享函数应该在头文件声明,在某一源文件里定义。

 

默认实参:

某一形参具有了默认实参,他后面所有的实参都应该有默认实参。调用含有默认实参的函数时,显式实参必须左对齐。

通常应该在函数声明中指定默认实参,并将其声明放入头文件中,在定义该函数时不再指定默认实参。

 

静态局部对象:在反复调用某一函数时,其值每次都保留上一次调用之后的结果。定义静态局部对象时在前面加上static

 

内联类型:

内联函数一般在头文件中定义,不能递归使用。

 

类成员函数:

类成员函数必须在定义类的花括号中声明,但可以在外面定义。编译器隐式地将在类内定义的函数当做内联函数this 指针前面已介绍过。

成员函数形参列表后面跟着const表示this的类型,即只能访问类的成员,不能修改,这种成员函数称为常量成员函数。如果函数被声明成了const,定义时也要加上const

 构造函数一般放在public部分,如:sales_item():units_sold(0),revenue(0.0){}

对此函数应该这样理解:sales_item为默认构造函数的函数名,()为形参列表{}代表函数体,这里形参列表和函数体都为空。中间的部分称为构造函数的初始化列表,用于对数据成员进行初始化。

如果没有为一个了类显示定义构造函数,编译器将创建合成的默认构造函数,一般只适用于只包含类成员的类,而其中的类成员有其本身的默认构造函数。

 

类定义应置于同名的.h.H文件中,而成员函数定义在与类同名的cpp文件中。

 

重载函数:

重载函数指函数名和返回类型相同,但形参不同。如果形参列表和返回类型都相同,则为重复声明,可以重复声明。若形参列表相同但返回类型不同,则视后者声明是错的。局部函数重载和局部变量的定义一样,会屏蔽外部定义的重载函数,因为总是先查找名字再检查类型。

函数重载与实参转换:包括确定候选函数、可行函数和最佳函数三个阶段。最后的结果可能是匹配错误(找不到相匹配的函数)或二义性错误(找到多于一个的最佳匹配函数)。当形参为引用或指针时,形参是否为const型(const是修饰指针指向的对象,而不是指针本身)可以作为区分重载函数的依据,当形参以副本传递时(即非引用和指针型),不能基于形参是否为const来实现重载。

 

指向函数的指针:

定义如下:int *p)(…….

也可以用typedef int *p(….)

对指向函数的指针赋值可以直接赋函数名也可以是函数名的取地址,两种都可以。

形参为指向函数的指针,如 void a(int (*)(…))

返回指向函数的指针:int*f(int)(int ,int )等价于声明一个函数f(int),它的返回值为指向函数的指针 int(*)(int,int )。函数返回值可以使指向函数的指针,但不可以是函数。

可以将重载函数的函数名赋给指向函数的指针,但必须是精确匹配,即返回类型、形参都精确匹配(不包括可转换的匹配)。



https://blog.sciencenet.cn/blog-691244-570236.html

上一篇:C++Primer学习笔记
下一篇:C++Primer学习笔记
收藏 IP: 210.77.9.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-25 05:26

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部