《 C++语言程序设计》第二次直播课堂主讲 首都经贸大学 李.ppt

《 C++语言程序设计》第二次直播课堂主讲 首都经贸大学 李.ppt

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

《 C++语言程序设计》 第二次直播课堂 主讲 首都经贸大学 李宁 副教授 一、关于函数原形和头文件 函数的定义和函数的原型 例: double cubic(double d){ //定义 return d*d*d; } double cubic(double d); //原形 函数原形提供了生成函数调用代码所必须的接口信息,因此: 在函数的调用处之前,需通过函数原形提供该调用函数的接口信息。 函数定义也能提供同样的接口信息,因此: 如果函数的定义出现在函数调用处之前,函数原形即可省略。 但是,通过函数定义来担负函数原形的任务存在着下列问题: 函数的定义必须出现在函数调用的同一文件中,限制了函数的使用范围; 函数定义必须以源程序的形式呈现,不便于将之作为产品提供; 不便于实现大系统,不便于分工。 应尽可能做到函数的实现(定义)与函数的使用(调用)的分离: 首先设计函数原形,作为函数定义和函数调用必须共同遵守的接口标准; 将定义函数的程序和使用函数的程序放在不同文件中。 头文件以固定的、便于利用的形式保存一组函数的调用接口信息,确保了接口信息描述的正确性和一致性。 用#include命令将头文件插入到需要的程序文件中 二、关于函数模板 什么情况下不可省略模板实参? 无法通过模板函数的参数隐含获得相关信息的模板参数; 在任何不可省略参数前面的模板参数。 例1: templateclass T1, class T2, class T3 T2 Max(T1 x, T3 y){ return T3(T3(x)T3(y)? x : y); } //定义 coutMaxint,foat(3,3.5); //调用 提示:未出现在模板函数参数表中的模板参数,其实参不得省略。 例2(教材例5.10): template typename Type, int Rows,int Cols void sumAll(Type data[][Cols], Type result[]){ for(int i=0;iRows;i++){ result[i]=0; for(int j=0;jCols;j++) result[i]+=data[i][j];} } //定义 int d[][3]={ {1,2,3},{2,3,4}, {4,5,6},{6,7,8}}; int r[4]; sumAllint,4,3(d,r);//调用 提示:对于普通类型(非虚拟类型)的模板参数,其实参不得省略。 例3: templateint Rows,int Cols, typename Type .. .. .. //定义 .. .. .. sumAll4,3(d,r); //调用 提示:通过调整模板参数的顺序,有可能使更多的模板实参可以省略。 三、关于参数表中的数组 参数表中的数组就是指针 因此,定义参数表中的数组时不必给出第一维的大小; 因此,对于参数表中的数组,也可以定义为指针,对应关系是: A[] ←→ *A; A[][]… ←→ (*A)[]… 因此,调用这样的函数时,只需以数组名作为实参; 因此,修改形参数组就是在修改形参指针所指向的数据,也就是在修改实参数组。但这并不违反“传值”原则,因为对应于形参的实参数组名(指针)并没有被修改; 四、动态空间的使用应避免的问题 悬挂访问:通过一个没有初始化的指针或空指针访问不存在的数据; 存储泄漏:申请的动态空间用完后被丢弃,没有释放; 重复释放:同一动态空间被多次释放; 申请操作与释放操作不配套 例如用 malloc() 申请,用 delete释放;或用 new 申请,用 free() 释放。 五、两种重要的构造函数 无参构造函数 指: 未定义参数的构造函数,或 : 所有参数均为可选参数的构造函数。 如果类中包含一个类对象数据成员,而类的构造函数又没有对之进行初始化,则系统隐含调用该成员所属类的无参构造函数进行初始化。 对于派生类,构造函数没有对基类进行初始化,则系统隐含调用基类的无参构造函数进行初始化。 每个类至少要有一个构造函数。如果没有定义,系统自动生成一个形如 X(){} 的默认无参构造函数。 由于无参构造函数有可能被隐含调用,因而类中通常应该有无参构造函数。如果类中已经定义了若干构造函数,应检查其中是否包含无参构造函数,如没有,应添加一个。 隐含调用无参 构造函数例1 class XX{ int xx; public: XX(int n=0):xx(n){}

文档评论(0)

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

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

1亿VIP精品文档

相关文档