c++Primer学习笔记(7)--函数

原创 2005年04月29日 17:34:00

第七章 函数

l         函数定义和声明:我们必须在调用函数之前就声明该函数,否则会引起编译错误;当然函数定义也可以被用作声明,但是函数在程序中只能被定义一次。典型情况下函数定义被放在单独的程序文本文件中或者与其他相关的函数定义放在同一个文本文件中,要想在其他文件而不是包含函数定义的文件中使用该函数,我们必须要用到另外一种函数声明机制,将包含该函数的文件#include进来。

l         函数声明由函数返回类型、函数名和参数表构成,这三个元素被称为函数声明function declaration 或函数原型function prototype。函数声明以及inline 函数的定义最好放在头文件中。

l         函数原型由函数返回类型函数名以及参数表构成。函数原型描述的是函数的接口,它详细描述了调用函数时需要提供的参数的类型和个数以及函数返回值的类型。在C++标准化之前,如果缺少显式返回类型的话返回值会被假定为int类型。在标准C++中,返回类型不能被省略。

l         函数的参数表不能省略,没有任何参数的函数可以用空参数表或含有单个关键字void 的参数表来表示。在C++中两个函数可能同名,但参数表不同这种函数被称为重载函数overloaded function 参数表称为函数的符号特征signature 冈为它被用来区分函数的不同实例。有了名字和符号特征就可以惟一地标识函数;也就是一个函数由函数名和参数唯一确定。

l         参数传递的几种方式:(1C++中参数传递的缺省初始化方法是把实参的值拷贝到参数的存储区中,这被称为按值传递pass-by-value。按值传递时函数不会访问当前调用的实参,函数处理的值是它本地的拷贝。(2引用传递,把参数声明成引用实际上改变了缺省的按值传递参数的传递机制。在按值传递时函数操纵的是实参的本地拷贝;当参数是引用时函数接收的是实参的左值而不是值的拷贝,这意味着函数知道实参在内存中的位置因而能够改变它的值或取它的地址。(3指针传递,与引用传递差不多,也是传递内存中的地址。它与引用的区别:引用必须被初始化为指向一个对象,一旦初始化了它就不能再指向其他对象;指针可以指向一系列不同的对象,也可以什么都不指向。如果一个参数可能在函数中指向不同的对象或者这个参数可能不指向任何对象,则必须使用指针参数。(4数组参数,C++中,数组永远不会按值传递,它是传递第一个元素准确地说是第0 个的指针。(5抽象容器类型参数,容器类型实际上是类类型,它比内置数组数据类型提供了更多的功能。(6缺省实参,函数可以用参数表中的初始化语法为一个或多个参数指定缺省实参。调用包含缺省实参的函数时,我们可以也可以不为该参数提供实参,如果提供了实参则它将覆盖缺省的实参值,否则函数将使用缺省实参值。(7省略号,有时候我们无法列出传递给函数的所有实参的类型和数目。在这种情况下我们可以用省略号... 指定函数参数表。省略号挂起类型检查机制它们的出现,告知编译器当函数被调用时可以有0 个或多个实参,而实参的类型未知。省略号有下列两种形式void foo( parm_list, ... );  void foo( ... );  第一种形式为特定数目的函数参数提供了声明,在这种情况下当函数被调用时对于与显式声明的参数相对应的实参进行类型检查,而对于与省略号对应的实参则挂起类型检查。在第一种形式中参数声明后面的逗号是可选的。

l         函数返回值return 语句被放在函数体内,这条语句结束当前正在执行的函数。在程序执行期间遇到return 语句时,程序控制权被返回给调用此函数的函数。return 语句有两种形式:return;  return expression;

l         递归函数,直接或者间接调用自己的函数称为递归函数。递归函数必须定义一个停止条件,否则会无限递归下去。

l         内联函数(inline,出现原因:调用函数比直接计算条件操作符要慢得多。若一个函数被指定为inline 函数,则它将在程序中每个调用点上被内联地展开。

l         链接指示符“extern C程序员用链接指示符(linkage directive)告诉编译器,该函数是用其他的程序设计语言编写的。链接指示符有两种形式,既可以是单一语句single statement 形式。也可以是复合语句compound statement 形式。

// 单一语句形式的链接指示符

extern "C" void exit(int);

// 复合语句形式的链接指示符

extern "C" {

int printf( const char* ... );

int scanf( const char* ... );

}

// 复合语句形式的链接指示符

extern "C" {

#include <cmath>

}链接指示符的第一种形式由关键字extern 后跟一个字符串常量以及一个普通的函数声明构成,虽然函数是用另外一种语言编写的,但调用它仍然需要类型检查。

l         Main()处理命令行选项Main()函数原形,int main( int argc, char *argv[] ) { ... }argc 包含命令行选项的个数,argv 包含aygc C 风格字符串,代表了由空格分隔的命令选项。argv[0]总是被设置为当前正被调用的命令。从索引1 argc-1 表示被传递给命令的实际选项。

l         指向函数的指针,int (*pf)( const string &, const string & ); 这个语句声明了pf 是一个指向函数的指针,该函数有两个参数和int 型的返回值即指向函数的指针。当一个函数名没有被调用操作符修饰时,会被解释成指向该类型函数的指针。指向函数的指针可以被用来调用它所指向的函数。调用函数时,不需要解引用操作符。无论是用函数名直接调用函数还是用指针间接调用函数,两者的写法是一样的。我们还可以定义函数指针数组。

 

 

 

C++ Primer学习笔记——$7 语句和函数

题记:本系列学习笔记(C++ Primer学习笔记)主要目的是讨论一些容易被大家忽略或者容易形成错误认识的内容。只适合于有了一定的C++基础的读者(至少学完一本C++教程)。 作者: tyc611, ...
  • whycold
  • whycold
  • 2011年01月19日 15:00
  • 546

2012/2/7 《C++ Primer Plus》第十六章:string类和标准模板库 学习笔记

《C++ Primer Plus》第十六章学习笔记 这一章粗略介绍了一下STL和泛型编程,我也是粗略地看了一看。   181:String类构造函数:   182:关于输入: C风格字...
  • Zyearn
  • Zyearn
  • 2012年02月07日 20:08
  • 1010

C++ Primer学习笔记(7)——指针形参和引用形参的比较

前面讲到了巧用引用形参可以达到很好地目的。还有一种是指针形参,它用的比较少,专用于数组形参。问:什么时候应使用指针形参?什么时候应使用引用形参?两者的优缺点是什么?...

C++ Primer 学习笔记与思考_7 void和void*指针的用法

(一)void的含义 void的字面意思是“无类型”,void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义: void a; 这行语句编译时会出错,提...
  • NK_test
  • NK_test
  • 2015年08月18日 10:21
  • 1673

C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器

 STL实践与分析 --容器适配器 引: 除了顺序容器,标准库还提供了三种顺序容器适配器:queue,priority_queue和stack,适配器是标准库中的概念,...

C++ primer (5th) 随想与学习笔记 7 执行流程永不变 新标准添精彩

第五章:语句
  • tdkcs
  • tdkcs
  • 2014年06月23日 22:19
  • 582

C++ Primer Plus学习笔记 第六章 cctype字符函数库 switch语句 continue和break语句 基本文件输入输出

声明:本文整理自《C++ Primer Plus》 1.错误防范。 将表达式mynumber==3反转为3==mynumber,以此来捕获将相等运算符写成赋值运算符。 2.&&运算符 &&...

[C++ Primer Plus]学习笔记 --字符函数库cctype

c++中应该是#include c中应该是#include 以下为字符函数库中常用的函数:函数名称 返回值 isalnum() 如果参数是字母数字,即字母或数字,该函数返回true isalpha...

C++ Primer Plus学习笔记之虚函数

C++ Primer Plus学习笔记之虚函数 C++语言的多态性有两种类型:静态多态性和动态多态性。函数重载和运算符重载就是静态多态性的具体表现,而动态多态性是指程序运行过程中才动态的确定操作所...

c++ primer plus 学习笔记(1)——复制构造函数与赋值运算符

c++中类的复制构造函数与赋值运算符的用法 浅复制与深复制
  • jifaley
  • jifaley
  • 2016年09月12日 22:20
  • 104
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++Primer学习笔记(7)--函数
举报原因:
原因补充:

(最多只允许输入30个字)