Chap4+函数与程序结构.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
标准转换匹配 任何算术类型可以互相转换 枚举类型可以转换成任何算术类型 零可以转换成任何算术类型或指针类型 任何类型的指针可以转换成void * 派生类指针可以转换成基类指针 每个标准转换都是平等的。 例 例如,对于下述的重载函数: void print(char); void print(char *); 根据标准转换匹配,下面的函数调用: print(1); 绑定到函数:void print(char); print(0.0); 绑定失败 自定义转换匹配 例如,对于下述的重载函数: void print(char); void print(double); 函数调用 print(1); // ambiguous 自定义转换匹配 print((char)1); print((double)1); 例P99 带缺省值的形式参数(P95) 在C++中允许在定义或声明函数时,为函数的某些参数指定默认值。 当调用这些函数时如果没有提供相应的实参,则相应的形参采用指定的默认值,否则相应的形参采用调用者提供的实参值。 例如,对于下面的函数声明: void print(int value, int base=10); 下面的调用: print(28); //28传给value;10传给base print(32,2); //32传给value;2传给base 续 在指定函数参数的默认值时,应注意: 1. 有默认值的形参应处于形参表的右部。例如: void f(int a, int b=1, int c=0); //OK void f(int a, int b=1, int c); //Error 2. 对参数默认值的指定只在函数声明处有意义。 3. 在不同的源文件中,对同一个函数的声明可以对它的同一个参数指定不同的默认值; 4. 在同一个源文件中,对同一个函数的声明只能对它的每一个参数指定一次默认值。 编译预处理命令 编译预处理 在程序编译前进行的处理 使用编译预处理命令由编译预处理程序完成。 编译预处理命令使用“#”开始。 编译预处理命令有: 宏定义:#define 文件包含:#include 条件编译:#if …#else…#endif 行控制:#line 其他: #pragma, #error, 宏定义 使用一个宏名命名一个字符串. 用#define来实现,是C++的一种编译预处理命令 在C++中,宏定义有4种格式: #define 宏名 文字串 // 不带参数的宏 #define凵宏名 (参数表)凵文字串 //带参数的宏 #define凵宏名 #undef凵宏名 例如: #define max(a,b) (((a)(b))?(a):(b)) #define PI 3.1415926 不带参数的宏 宏定义格式: #define 宏名 宏体 例 #define PI 3.1415926 #define DEBUG 宏引用格式:直接使用宏名 例 area = PI*R*R; 不带参数宏的说明 编译预处理系统,只是简单地进行字符替换,不作任何计算和检查。 例(P90): #define ONE 1 #define TWO ONE+ONE int I=TWO*5 =6 #define ONE 1 #define TWO ((ONE)+(ONE)) int I=TWO*5 =10 ? 如果宏体太长,宏体可以占多行 用 “\” 续行。 带参数的宏 定义格式: #define 宏名(参数表) 宏体 例 #define CUBE(x) ((x)*(x)*(x)) //注意加括号 带参数的宏的使用类似于函数,但不完全相同。 函数调用在程序执行时进行,需要进行参数类型检查,参数传递等;宏则不然 宏有时会出现重复计算。 例如: max( x+1, y*2 ) 将被替换成: (((x+1)(y*2))?(x+1 ):(y*2)) 带参数的宏的说明 宏替换在编翻译前进行。 例 (macroCube.cpp) 使用带参数的宏须小心(P94 的例) 鉴于宏定义的上述缺点,C++提供的解决函数调用效率不高问题的措施:内联函数。 #define CUBE(x) ((x)*(x)*(x)) inline int cube(int x) { return x*x*x; } void main(void) { int a=3,b=3

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档