网站大量收购独家精品文档,联系QQ:2885784924

C++-Function-4.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C-Function-4

C++语言 函数 函数声明、函数定义和函数调用 参数 —— 可空,也可变长;参数可以是基本类型、指针、引用、结构等。但不能为数组本身(实际上是数组的地址)。 返回值 —— 可为基本数据类型, void, 结构、指针或引用;不能是数组 参数和返回值如何传递呢? 不同的CPU、编译器可能有所不同。大多是使用寄存器(如X86下的[EDX]: EAX)或内存单元(栈)。 函数原型 为何需要原型? 函数原型是函数定义者和使用者的接口。 原型是函数到编译器的接口。编译器通过原型知道函数需要几个参数,什么样的参数,返回值类型等。C中常见BUG是传递一个普通数据给指针。【例1】 函数声明中的形参名会被忽略。 const 和非const const 与函数 留心看下面的函数声明 char *strcpy char *, const char * ; char *strcpy char *dst, const char *src ; 约定:如果是纯输入指针参数(内容不会被函数修改),则应声明为const。【例2】 const int mons[] 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ; int sum int mons[], int n ; int days sum mons, 12 ; 为什么? 参数传递 普通对象参数通过副本传递给函数 大型对象的副本传递成本很大 副本不能完成对象的修改 采用对象的指针/引用可以解决上述问题 如果函数不修改对象,将指针/引用参数const化 函数返回值 返回普通对象 —— 值copy传递 string max const string s1, const string s2 return s1 s2 ?s1:s2; 返回引用 —— 返回对象本身 const string max const string s1, const string s2 return s1 s2 ?s1:s2; 千万不要返回指向局部对象的引用/指针【构造例子测试】 函数返回值 引用返回左值【例3】 char at string s, int idx return s[idx]; int main string s hello c++ ; cout s endl; at s, 0 H; // h -- H cout s endl; return 0; 内联函数 内联函数与宏 内联是 C宏(#define)的另一个“杀手”! 尽可能地抛弃宏【请测试之】 #define max a,b a b ? a : b int a 5, b 0; int x max ++a, b ; // x int y max ++a, b + 10 ; // y inline int max int a, int b return a b ? a : b; 可是宏的优点? c++的泛型 template 函数的缺省参数 函数缺省参数的规则 缺省值参数必须出现在后面。 函数调用时,若某参数省略,则其后参数皆应省略。 函数重载 C++的函数多态,一种形式是默认参数,另一种形式是函数重载(overloading)。 函数重载:一个函数名具有多个实现形式。 函数重载 函数调用时,使用哪个函数?靠什么决定? 参数类型“特征”:重载时特征不能相同! print x ; // 由 x 类型决定 举例: void load int ; void load int, int ; void load double ; void load char * ; void load const char * ; // ??可以么 那么下面的调用使用哪个函数呢? 1 load 1 ; // ? 2 load /*short */sh ; //? 函数重载 下面的函数重载 void load int ; // #1 void load int ; // #2 int ii 10; load ii ; // which one? 不可滥用重载。必要时重载。何时必要? 函数执行基本相同的任务,但使用不同数据。 可重载,也可用默认参数解决的时候,选择哪个? C++的函数名字装饰,看汇编代码 灵活的局部变量说明 C++中局部变量声明的作用域从其说明点到所在的最小程序段末尾的范围内有效。 for int k 5; k 0; k-- //程序代码段; //在这里,变量k只在for循环域中有效。 // 到此为止 本章小结 新注释。 新的I/O流。 引用 new和delete co

文档评论(0)

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

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

1亿VIP精品文档

相关文档