版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 C语言书写程序回顾:语言书写程序回顾: /hello,the world程序程序 #include int main() printf(“%s”,“hello,the world!”); return 0; C+ hello world程序:程序: /hello,the world程序程序 #include using namespace std; int main() cout“hello,the world!”; return 0; 1 C+保留字保留字 2 C+命名空间命名空间 3 C+语言的输入输出语言的输入输出 4 动态内存的分配与释放动态内存的分配与释放 5 引用引用 6 C+
2、函数新种类函数新种类 C+向下兼容原向下兼容原c语言,因此采用语言,因此采用C语言写的程语言写的程 序代码,在序代码,在C+环境下仍能编译运行。环境下仍能编译运行。 为提高开发效率,为提高开发效率,C+ 对对C语言进行了扩充,语言进行了扩充, 重点加入了面向对象语言成分。重点加入了面向对象语言成分。 ANSI CANSI C的的3232 个保留字个保留字 ANSI C+ANSI C+ 的的2929个扩充个扩充 保留字保留字 namespace ns1 float a,b,c; fun1() float a,b,c; a=ns1:a; ns1的作用域,的作用域,作用域内作用域内 定义的变量,对象
3、,函定义的变量,对象,函 数,可以数,可以直接使用直接使用. 作用作用域外使用域外使用域内的名域内的名 字,则需字,则需加上域操作符加上域操作符 : 可以在同一文件内使用多个同名变量,函数可以在同一文件内使用多个同名变量,函数 等同名对象,去除等同名对象,去除“同名冲突同名冲突”。 如两程序员写各自模块时,都自定义了一个如两程序员写各自模块时,都自定义了一个 同名函数,一旦同时包含,则冲突。同名函数,一旦同时包含,则冲突。 namespace ns1 namespace ns2 float a,b,c; fun1() float a,b,c; a=ns2:a; float a; a=ns1:n
4、s2:a; 名字空间支持名字空间支持 多重嵌套多重嵌套 using n1:n2:a; /直接使用具体名字直接使用具体名字 float b; b=a; using namespace n1:n2; float b; b=a; 名字空间名字空间简化简化 用法用法 确定变量确定变量/函数函数/对象所属作用对象所属作用 域,即确定当前使用的有多个同名域,即确定当前使用的有多个同名 的变量的变量/函数函数/对象到底是哪个。对象到底是哪个。 float a=2.4; / 全局变量全局变量 void main() int a=8; / 局部变量局部变量 coutaendl; cout:aendl; / :a
5、表示全局作表示全局作 用域中的变量用域中的变量a 作用域运算符作用域运算符(:) 标准标准C+库中的所有组件都是在一个被称为库中的所有组件都是在一个被称为std的名的名 字空间中声明和定义的。在采用标准字空间中声明和定义的。在采用标准C+的平台上的平台上 使用标准使用标准C+库中的组件,只要写一个库中的组件,只要写一个using指示符:指示符: using namespace std; 就可以直接使用标准就可以直接使用标准C+库中的所有成员。库中的所有成员。 注意:如果使用了名空间注意:如果使用了名空间std,则在使用,则在使用#include 编译预处理命令包含头文件时,编译预处理命令包含头
6、文件时,必须去掉头文件的必须去掉头文件的 扩展名扩展名.h,否则会出错。,否则会出错。 namespace std C+采用新的采用新的I/O流流来取代来取代C中的中的scantf/printf I/O函数。函数。 基本格式如下:基本格式如下: #include cout“输出内容输出内容”“输入内容输入内容”; / cin为标准输入流对象为标准输入流对象(默认默认 从键盘输入从键盘输入) 示例示例2.12.1: void main()void main() char name10; char name10; int age; int age; coutplease input your na
7、me:; coutname; cinname; coutHow old are you:; coutage; cinage; coutname is nameendl; coutname is nameendl; coutage is ageendl; coutage is ageendl; 使用使用cout/cin的的 好处好处在哪?在哪? C+C+采用采用算符算符new/deletenew/delete取代取代c c中的中的malloc/freemalloc/free函函 数来实现动态内存的分配与释放。数来实现动态内存的分配与释放。 a. newa. new运算符运算符 int int *
8、 * a=(int a=(int * *)malloc(sizeof int);)malloc(sizeof int); int int * *a=new int; a=new int; /new/new的使用的使用 newnew从从堆内存堆内存中为程序分配可以保存某种类型中为程序分配可以保存某种类型 数据的一块内存空间,并返回指向该内存的首数据的一块内存空间,并返回指向该内存的首 地址,该地址存放于指针变量中。地址,该地址存放于指针变量中。 b. deleteb. delete运算符运算符 free(a);free(a); delete a; delete a; /delete/delete
9、的使用的使用 (1) new,delete(1) new,delete应应成对成对使用;使用; (2) (2) 对一个指针只能调用一次对一个指针只能调用一次deletedelete; (3) (3) 用用deletedelete运算符作用的运算符作用的对象对象必须是用必须是用newnew分配分配 的内存空间的首地址。的内存空间的首地址。 示例示例2.32.3: void main( )void main( ) int int * *p; p; p=new int; / p=new int; / 分配内存空间分配内存空间 * *p=5;p=5; coutcout* *p; p; delete p
10、; / delete p; / 释放内存空间释放内存空间 数组的动态分配数组的动态分配/ /释放示例:释放示例: int n=10;int n=10; int int * *p= new intn;p= new intn; int (int (* *q)5=new intn5;q)5=new intn5; if(q=0)if(q=0) cout overflow memory. endl;cout overflow memory. b ) ? a, b; return( a b ) ? a, b; 现在我们使用该函数:现在我们使用该函数: int a=10,b=9,c;int a=10,b=9
11、,c; c=max(a,b);c=max(a,b); double a=1.2,b=2.3,c;double a=1.2,b=2.3,c; c=max(a,b);c=max(a,b); 参参数数类类型型被被强强制制 转转换换,结结果果为为2 2. .0 0, 错错误误! 需重写一个函数:需重写一个函数: double max(double a, double max(double a, double b)double b) return( a b ) ? a, b; return( a b ) ? a, b; 函数模板的实现:函数模板的实现: template template 返回类型返回类
12、型 函数名(形参表)函数名(形参表) 实现;实现; 示例:示例: template template T max( T a, T b ) T max( T a, T b ) return( a b ) ? a, b;return( a b ) ? a, b; 实际使用时,编译器根据实际使用时,编译器根据 程序实参形式确定确定的函数,程序实参形式确定确定的函数, 此时得到此时得到模板函数模板函数。 示例:示例: 编译器对语句:编译器对语句: int a, b=10,c=12;int a, b=10,c=12; a=max(b,c);a=max(b,c); 生成如下生成如下模板函数模板函数: in
13、t max( int a,int b ) int max( int a,int b ) return( a b ) ? a, b;return( a b ) ? a, b; 注意:注意:模板函数不能进行模板函数不能进行 自动类型转换!自动类型转换! templatetemplate T min(T x, T y) T min(T x, T y) int n=3; int n=3; char c=a; char c=a; double d=2.4; double d=2.4; min(n,n); min(c,c); min(d,d); min(n,n); min(c,c); min(d,d);
14、min(n,c); min(n,d); min(c,d);min(n,c); min(n,d); min(c,d); 注意:注意:系统支持函数模板系统支持函数模板 重载!重载! templatetemplate void disparr(T void disparr(T* * arr, int n) template arr, int n) template void disparr(T void disparr(T* * arr, int i, int j) arr, int i, int j) int a8; int a8; double b7;double b7; disparr(a,8
15、); disparr(a,8); disparr(b,2,6); disparr(b,2,6); 该函数匹配哪一个函数定该函数匹配哪一个函数定 义?义? templatetemplate void disparr(T void disparr(T* * arr, int n) arr, int n) void disparr(intvoid disparr(int* * arr, int i) arr, int i) int a8; int a8; disparr(a,8); ?disparr(a,8); ? 系统首先进行系统首先进行精确精确匹配(包括函匹配(包括函 数重载),若找到则返回;否
16、则,进数重载),若找到则返回;否则,进 行函数模板匹配(行函数模板匹配(模糊模糊匹配),找到匹配),找到 则返回;否则,对函数进行则返回;否则,对函数进行强制类型强制类型 转换转换匹配。匹配。 函数匹配问题:函数匹配问题: 我们学习了函数重载,函数模板等函我们学习了函数重载,函数模板等函 数多态性机制。那么,对一个同名函数多态性机制。那么,对一个同名函 数,系统是如何进行匹配的呢?数,系统是如何进行匹配的呢? 示例:示例: templatetemplate T max(T x, T y) T max(T x, T y) int max(int x, int y, int z=0) int max(int x, int y, int z=0) char max(char x, char y) char max(char x, ch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年仓储物流代理合作协议详本
- 2024年专用合同:适用于小型工程的建筑施工协议
- 2024年拉萨客运从业资格证考试题技巧及答案
- 产业园区发展现状:房地产调研报告
- 乳酸检测在生物物理学中的应用
- 会展公司配电室操作指南
- 临床特点及治疗分析:感染性疾病
- 企业职业健康传染病上报流程图
- 2024年海运货代项目立项申请报告模范
- 丙泊酚麻醉在皮肤手术中的应用
- 高标准基本农田建设监理工作总结
- 机电安装工程技术专业培训
- 7逆合成分析法与合成路线设计
- 工程材料构配件设备报审表
- 《Monsters 怪兽》中英对照歌词
- 华东地区SMT公司信息
- 隧道弃渣及弃渣场处理方案
- 隔代教育PPT课件
- 签证用完整户口本英文翻译模板
- 金属盐类溶度积表
- 社会工作毕业论文(优秀范文8篇)
评论
0/150
提交评论