C++优秀课件第02章C++非类部分对C的扩充

上传人:E**** 文档编号:90582921 上传时间:2019-06-13 格式:PPT 页数:26 大小:134.50KB
返回 下载 相关 举报
C++优秀课件第02章C++非类部分对C的扩充_第1页
第1页 / 共26页
C++优秀课件第02章C++非类部分对C的扩充_第2页
第2页 / 共26页
C++优秀课件第02章C++非类部分对C的扩充_第3页
第3页 / 共26页
C++优秀课件第02章C++非类部分对C的扩充_第4页
第4页 / 共26页
C++优秀课件第02章C++非类部分对C的扩充_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《C++优秀课件第02章C++非类部分对C的扩充》由会员分享,可在线阅读,更多相关《C++优秀课件第02章C++非类部分对C的扩充(26页珍藏版)》请在金锄头文库上搜索。

1、2.1 I/O操作 2.2 强类型机制 2.3 引用 2.4 内联函数 2.5 指针 2.6 操作字符串数据的标准函数库 2.7 块内的说明 2.8 new 和delete运算符 2.9 作用域访问运算符: 2.10 const的扩充作用 2.11 函数重载 2.12 参数个数不定的函数,通常C+编译系统(例如IDE)可以根据文件的扩展名来区分C和C+:是 .C的认为是C程序, .CPP的是C+程序。 C+是C的超集,掌握C是掌握C+的先决条件。C+中超出C的部分主要是面向对象的程序设计,也是产生C+的根由。但是C+非类部分对C的语法也作了扩充和很少的“更新”,例如C语言允许一个全局变量多次定

2、义,C+中则会引起错误。,2.1 I/O操作,C+完全支持C的I/O函数集,但C+的I/O类库和I/O操作内容也很多,需要分阶段逐步去掌握。这里先举两个简单的实例: C+中的 out 相当于C中的输入函数scanf()。,/C+中使用 cin 和cout 举例 main(void) char str80; coutstr; /read a string ,C+是强类型的,在C中不强制使用原型化函数,在C+中这一要求是必须的、强制的,所有函数必须使用原型。C+可以在函数原型中采用默认值, 例如:fn ( int x, float y=1.0, int z=3 ); 默认的值必须从右到左敷值起,下

3、面的例子是非法的:fn ( int x, float y=1.0, int z); 当调用函数时,默认的值也要从右到左计算起。如果函数原型为:fn ( int x, float y=1.0, int z=3 ),则调用fn ( 1, 2 ) 相当于调用fn ( 1, 2.0, 3)。,2.2 强类型机制,引用作为对象的别名而使用,对引用的改动实际是对对象的改动。当建立引用时,程序用另一个变量或对象名字初始化它。 引用的声明形式为 &引用名=对象名 或 & 引用名=对象名 其中: (1) 引用名必须遵循变量的命名规则。 (2) 前面的数据类型就是它所引用对象的数据类型。 引用不是值,不占存储空间

4、,声明引用时,对象的存储状态是不会改变的。,2.3 引用,/例2-1 EX2_1.cpp 演示“引用”的用法 #include “iostream.h“ void swap(int ,void swap ( int 程序执行后的屏幕显示: 10 20 20 10,/例2-2 EX2_2.cpp 演示“引用”的扩充用法 #include “iostream.h“ main(void) int x1, x2; int ,内联函数是在编译时将函数体嵌入在每一个调用语句处,节省了参数传递、系统栈的保护与恢复等的开销。 内联函数的定义形式为: ( 形参表 ) 函数体 ,2.4 内联函数,/例2-3 EX

5、2_3.cpp 内联函数 #include #include inline int max(int a, int b) /定义内联函数 if ( ab ) return a; else return b; void main() int a, b, c, d; a=210; b=150; c=20; d=max(a,b); /编译时被替换为max函数体语句 d=max(d,c); /编译时被替换为max函数体语句 cout“The biggest of“ “a“ “b“ “c“ is “d; ,内联函数在C+中几乎取代了C的#define宏,因为它更灵活。并且没有什么副作用。 宏的副作用举例:

6、 #define sqr(x) x*x /定义计算x平方的宏 int y=sqr(2+3) /计算 5 的平方:5*5=25 计算结果:y=2+3*2+3=1125 。上述错误产生后较难跟踪,使用内联函数可以避免这种隐患。 注意控制结构不能放在内联函数中!,2.5 指 针,1指针的基本操作 与指针有关的基本运算符有以下两个: (1) &变量名 &为取地址运算符,用来获取变量的首地址。 (2) *指针变量名 *为指向运算符,用来获取指针变量所指向变量的值。 &和*运算符都是单目运算符,其优先级高于所有双目运算符,采用从右到左的结合性 (P33表2-4)。,2const修饰符与指针 const与指

7、针在一起使用,情况比较复杂,可简单归纳为三种:指向常量的指针、常指针和指向常量的常指针。 (1) 指向常量的指针 是一个指向常量的指针变量。例如: const char *name =“chen“; /声明一个名为name 的指针变量 name3= a; /错误,不容许改变已指向的常量 name =“zhang“; /正确,可以改变指针的指向,(2) 常指针 把指针本身声明为常量。例如: char *const name=“chen“; /声明一个名为name的常指针 name3= a; /正确,所指的数据可以改变 name=“zhang“; /错误,不容许改变指针本身 (3) 指向常量的常指

8、针 指针本身与它所指向的数据值均不能改变,例如: const char *const name=“chen“;/声明一个指向常量的常指针 name3= a; /错误,不能改变指针所指的值 name=“zhang“; /错误,不能改变指针的指向,C+提供了许多操作字符串数据的标准库函数,如比较字符串、搜索字符串中的字符、确定字符串长度等,只要我们在使用它们前在应用程序的开头添加包含“string.h”头文件的预处理命令#include ,在程序设计时就可直接引用。下表总结了这些函数。,2.6 操作字符串数据的标准库函数,C+字符串处理库(标准库)中常用的字符串操作函数,2.7 块内的说明,在C+

9、中,变量几乎可以在块(一对 之间)任何地方加以说明,其有效范围从说明处起一直到块的末尾。 但除for循环外,变量不能在其它控制语句中说明。下例是错误的: while(int i=0) 在嵌套的for语句中,内层要加 ,例如: for(int i=0; i=10; i+) for(int j=0; j=100; j+) 否则在编译时出错。 一个大的软件,各个部分都应遵循同一风格。,2.8 new 和delete 运算符,new 和 delete 运算符用来代替函数 malloc( ) 和 free( ),动态控制内存的分配和释放。delete 一定要配对释放用 new 分配的内存,否则会导致内存

10、泄漏、程序失控。 使用new的长处: 1. malloc( )时函数,必须要用强制类型说明;而new是操作符,能自动返回正确的指针类型; 2. New操作自动计算分配类型的长度,不须sizeof操作符。,2.9 作用域访问运算符 :,运算符 :用于访问(即分辨)全局名字(变量、对象等), 下例说明全局变量nData的访问方法: /EX2_4.cpp 演示作用域访问符: #include int nData; /全局变量 void main(void) int nData=1; /局部变量赋值 :nData=10; /全局变量赋值 cout “local nData=“ nDataendl; c

11、out“global nData=“:nDataendl; ,2.10 const的扩充作用,const在C+中可以用于定义一个常数变量。当一个变量定义为const时,表示其值在说明中被赋值,编译时已固定不变。例如: const int SIZE=100; char achNameSIZE; const变量的作用范围与static变量相同。,2.11 函数重载,用相同的函数名定义不同的功用称为函数重载。重载的函数根据参数的个数和类型进行区分,但不能根据返回类型进行区分。例如:,/ EX2_5.cpp : 演示函数重载 #include void fn ( int n ) cout “fn (

12、int ) called with “ nendl; void fn ( int nA, int nB ) cout“fn(int, int) called with “nA“ and “nBendl; void fn (char chA ) cout “ fn ( char ) called with “ chAendl; ,void main(void) int i=1, j=2; char c=a; fn ( i ); /call fn(int) fn ( i, j ); /call fn(int, int) fn ( c ); /call fn(char) 程序运行后屏幕显示: fn(

13、 int ) called with 1 fn( int, int ) called with 1 and 2 fn( char ) called with a,函数重载是C+对C语言的重要扩展!使C+的强类型机制作用得到充分的施展。例如,利用C+的强类型机制,可以用一个函数名sqrt定义出求三个不同类型数据的平方根函数: int sqrt(int i) ; int sqrt(float f) ; int sqrt(double d) ; 如用C语言就要定义三个不同名字的函数,例如:isqrt( ), fsqrt( ), dsqrt( ) 。调用时根据不同的数据类型不可用错函数名。 函数重载可以简化函数程序的编写; 函数重载可以用来屏蔽已存在的不合适的函数,而不需要改动原码。例如需对复数求平方根,只要增加新函数: Complex sqrt(Complex c); 就可以了。其中:Complex是用户定义的复数类型。,2.12 参数个数不定的函数,C+和C一样允许函数说明为带有不定个数的参数,用省略号来表明。由于C+编译器遇到省略号时会关闭函数的参数类型检查,将要和函数重载发生矛盾,所以参数个数不定的函数要慎用。这也是在C+中用cout取代printf( )的原因之一。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号