年9月2号c第1次课语言基础_第1页
年9月2号c第1次课语言基础_第2页
年9月2号c第1次课语言基础_第3页
年9月2号c第1次课语言基础_第4页
年9月2号c第1次课语言基础_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、教学目的和任务教学目的和任务q通过理论授课和项目实战,使学生掌握C +程序的全部语法和程序设计的基本方法,能够比较熟练地使用C +语言编写程序,培养出扎实的软件开发基本技能,并养成良好的编程风格,为进一步学习后续课程和将来从事应用软件开发奠定良好的基础。1学习经验学习经验q多动手,多看成熟的代码(STL)。q碰到困难,是好事,说明你要提高了。qC语言没掌握好的底下自己补。2C+参考书参考书qC+程序设计 .钱能 .清华大学出版社qC+程序设计的配套习题和解答 .钱能 . 清华大学出版社qC+ Primer作者:Stanley B.Lippman,Jose LaJoie,Barbara E.Mo

2、o 出版社:Addison Wesley/Pearson 3本章目标本章目标qC+ 与 CqC+的优点qC+中的数据类型q引用类型q函数重载、参数默认值qC+中的动态内存分配4C+C+与与C C的关系和区别的关系和区别q在C语言中引入了面向对象的思想q是一种混合型的语言,同时支持结构化程序设计和面向对象程序设计方法q兼容C语言,可不加修改地使用C语言代码q允许数据抽象,支持封装、继承和多态等特征5C+C+的优点的优点qC+适用的应用程序范围极广qC+可以用于硬件级别的编程qC+从C中继承了过程化编程的高效性,并集成了面向对象编程方式的功能qC+在其标准库中提供了大量的功能 STLq有许多商业C

3、+库支持数量众多的操作系统环境和专门的应用程序qC+具有良好的性能(算法效率与机器代码效率)q错误处理机制q更好的使用COM(ActiveX)与DCOM6C+标准库标准库 2-12-1q直接使用标准C中所有库,如以下是常用的标准C函数库头文件:stdio.hstdlib.hstring.hctype.h7C+标准库标准库 2-22-2qC+编译器都提供有完整的标准库qC+标准库中的几乎所有内容都是在命名空间std中定义的q使用C+标准库将获得非常多的功能8关键字关键字q 关键字是系统已经预定义的单词,有专用的定义。这些关键词都是保留字,用户不可再重新定义。q C+区分大小写,关键字全部由小写字

4、母组成。标准C+(ISO14882)定义了74个关键字,具体的C+编译器还会做一些增删q bool wchar_t class friend private protected public asm explicit namespace operator template this typename using virtual throw try delete false new true const_cast dynamic_cast reinterpret_cast static_cast export mutable typeid9数据类型分类数据类型分类C+中数据有常量和变量之分,它们

5、分别属于以下这些类型C+的数据类型 基本数据类型自定义数据类型布尔型(bool)字符型(char/wchar_t)整型(int)实型数组型(类型)指针型(类型 *)构造数据类型类(class)空类型(void)单精度型(float)双精度型(double)结构体型(struct)联合体型(union)枚举型(enum)10数据类型概述数据类型概述q 基本数据类型有4种:整型(int)、实型(float、double )、字符型(char)、逻辑型(bool)q 空类型void:用于显示说明一个函数不返回任何值q 构造类型又称为组合类型:是由基本类型按照某种规则组合而成的q 指针类型:变量用于存

6、储另一变量的地址,而不能用来存放基本类型的数据q 类类型:是体现面向对象程序设计的最基本特征,也是体现C+与C最大的不同之处11bool类型类型q逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC+6.0中为1个字节。q声明方式:bool result; result=true;q可以当作整数用(true一般为1,false为0)q把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false12常量说明符常量说明符constq 用const给字面常量起个名字(标识符),这个标识符就称为标识符常量;因为标识符常量的声明和使

7、用形式很像变量,所以也称常变量;q 定义的一般形式:q const 数据类型 常量名=常量值;q 数据类型 const 常量名=常量值;q 例如:q const float PI=3.14159f;q const int Number_of_Student=100;q 注意事项:q 常变量必须也只能在声明时进行初始化;q 常变量初始化之后,不允许再被赋值;q 常变量存储在数据区,并且可以按地址访问,编译时系统对常变量进行类型检查。q C+建议使用常变量,而不要使用#define符号常量。13结构体位段结构体位段qC+定义结构体中,可以为其成员定义时指定所占的位数(1个字节为8个位)struct

8、 Dateint year:20;int month:6;int day:6; C+中的结构体支持类的所有特性 内存对齐14强制类型转换强制类型转换q强制类型转换格式如下:qtype(表达式),例如:int(num);q(type)表达式,例如:(int)num;q作用:将表达式强制转换为type类型,但表达式的值及其类型不变q新增的强制类型转换运算符:q格式:static_cast(表达式)q例如:double root=3.14;qint value = (int)root; int value=static_cast(root);15域运算符域运算符q C+中增加的作用域标识符 :q 用

9、于对与局部变量同名的全局变量进行访问q 用于表示类的成员,这将在关于类的一节中详细说明#include int var=1;main()int var=0;printf(var=%dn,var);/局部变量var=:var;/引用全局变量printf(after var=:var %d,var);16动态动态分配内存分配内存q静态分配内存:在编译时确定了固定的内存地址与内存大小,如:函数里的局部变量、全局变量等q动态分配内存:由程序控制,运行时主动性的向系统申请所需大小的内存段,并且每次分配到的内存地址不固定qC+ 可以使用malloc、realloc、calloc和free函数实现,也可以使

10、用运算符new和delete实现17new运算符运算符qnew 运算符 可以用于创建堆空间q成功返回首地址,失败返回NULLq语法:q指针变量=new 数据类型;q指针变量=new 数据类型长度;q例如:int *p; p=new int;char *pStr=new char50;18delete运运算符算符qdelete运算符 可以用于释放堆空间q语法:delete 指针变量;delete 指针变量;q例如:delete p;delete pStr;19动态分配内存示例动态分配内存示例2-1#include #include int main()int * a;int i, num; pr

11、intf(Please enter the number of integers: );scanf(%d,num);a = new int num; 20动态分配内存示例动态分配内存示例2-2 if (a = NULL) printf( malloc error! exit.n ); return 1;for ( i = 0; i num; i + ) scanf(%d,&ai);for (i = 0; i num; i + ) printf( %5d,ai );printf(n); delete a ; return 0; 21函数重载函数重载3-1q C+允许用相同的函数名来定义一

12、组功能相同或类似的函数,程序的可读性增强q 函数重载又称为函数的多态性q 函数重载不同形式:q 形参数量不同q 形参类型不同q 形参的顺序不同q 形参数量和形参类型都不同q 调用重载函数时,编译器通过检查实际参数的个数、类型和顺序来确定相应的被调用函数22函数重载函数重载3-2q合法的重载例子:qint abs(int i);qlong abs(long l);qdouble abs(double d);q非法的重载例子:qint abs(int i);qlong abs(int i);qvoid abs(int i);/如果返回类型不同而函数名相同、形参也相同,则是不合法的,编译器会报语法错

13、误。23函数重载函数重载3-3#include int max(int x, int y); double max(double x, double y);void main() int a=10, b=20 ,c;double x=200.3, y=400.6, z;c = max(a,b);z = max(x,y);printf(%4d%5.1fn,c,z);int max(int x, int y) printf(int functionn); if(xy) return x; else return y; double max(double x, double y) printf(do

14、uble functionn); if(xy) return x; else return y; 24带默认形参值的函数带默认形参值的函数3-1q函数声明或者定义的时候,可以给形参赋一些默认值q调用函数时,若没有给出实参,则按指定的默认值进行工作25带默认形参值的函数带默认形参值的函数3-2q 函数没有声明时,在函数定义中指定形参的默认值q 函数既有定义又有声明时,声明时指定后,定义后就不能再指定默认值q 默认值的定义必须遵守从右到左的顺序,如果某个形参没有默认值,则它左边的参数就不能有默认值。q void func1(int a, double b=4.5, int c=3); /合法 q

15、void func1(int a=1, double b, int c=3); /不合法q 函数调用时,实参与形参按从左到右的顺序进行匹配26带默认形参值的函数带默认形参值的函数3-3#include double power(double x=10.0, int n=2); void main() printf(power(3,5)=%dn,power(3, 5); printf(power(3)=%dn,power(3);printf(power()=%dn,power();double power(double x, int n) int i;double s=1.0;for(i=1;

16、i=n; i+) s *= x;return s; 27带默认形参值的函数的二义性带默认形参值的函数的二义性q 重载的函数中如果形参带有默认值时,可能产生二义性#include int add(int x=5, int y=6); float add(int x=5, float y=10.0); void main() int a; float b; a= add(10,20); b= add(10); printf(a= %dn , a); printf(b= %dn,b); int add(int x, int y) return x+y; float add(int x, float

17、y) return x+y; b=add(10)语句产生二义性性,可以认为该语句是调用第一个函数,也语句产生二义性性,可以认为该语句是调用第一个函数,也可以是第二个,因此编译器不能确定调用的是哪一个函数。可以是第二个,因此编译器不能确定调用的是哪一个函数。28内联函数内联函数2-1q 当程序执行函数调用时,系统要建立栈空间,保护现场,传递参数以及控制程序执行的转移等等,这些工作需要系统时间和空间的开销。有些情况下,函数本身功能简单,代码很短,但使用频率却很高,程序频繁调用该函数所花费的时间却很多,从而使得程序执行效率降低。q 为了提高效率,一个解决办法就是不使用函数,直接将函数的代码嵌入到程序

18、中。但这个办法也有缺点,一是相同代码重复书写,二是程序可读性往往没有使用函数的好。q 为了协调好效率和可读性之间的矛盾,C+提供了另一种方法,即定义内联函数,方法是在定义函数时用修饰词inline。 29内联函数内联函数2-2/读入一行字符串,逐个判断是否为数字字符:# include inline IsNumber(char ch) return ch=0&ch=9?1:0;void main()char ch;while(cin.get(ch), ch!= n)if (IsNumber(ch) cout是数字字符 endl;else cout不是数字字符 endl;/因使用频度很高

19、,说明为内联函数。30带参数的宏定义带参数的宏定义q定义的一般形式:q#define (参数表) q例如:#define ADD(x,y) (x)+(y) /如果程序中有如下语句 s=ADD(7,8); /则被替换为s=7+8; #define MULTI(x,y) (x)*(y)q注意: q应写在一行上, 若不能写在一行,用续行符“”q宏名与左括号间不能有空格q宏体中尽量给参数加括号,可以避免替换后在优先级上发生问题31带参数的宏和函数的区别带参数的宏和函数的区别q 两者的定义形式不一样。宏定义中只给出形式参数,而不指明每一个形式参数的类型;而在函数定义中,必须指定每一个形式参数的类型。q

20、函数调用是在程序运行时进行的,分配临时的内存单元;而宏替换则是在编译前进行的,并不分配内存单元,不进行值得传递处理。q 函数调用时,要求实参和形参的类型一致;而宏调用时只用实参简单地替换形参。q 使用宏次数多时,宏展开后源程序会变长,因为每一次宏展开都会使源程序增长;而函数调用不使源程序变长。q 同样由于宏只做简单的文本替换,并不进行参数类型检查,在C+中建议采用inline函数来替换带参数的宏。32引用类型引用类型q 引用是一种特殊的变量,可以认为是一个变量的别名q 定义引用的一般格式:q 类型说明符 &引用名 变量名;q 例如:int a=1; int &b=a; / b是a的别名,因此a和b是同一个单元注意:定义引用时一定要初始化,指明该引用变量是谁的别名q 对数组只能引用数组元素,不能引用数组(数组名本身为地址)。q 不能定义引用的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论