您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > C++职业培训课件与笔记
C++Copyrightzm.chen,2012目录第1章C++基础第2章面向对象设计和使用第3章对象的使用第4章继承(一)第5章继承(二)第6章继承和多态第7章友元和运算符重载第8章模板第9章STL-1第10章STL-2第11章异常C++Copyrightzm.chen,2012C++基础第一章C++Copyrightzm.chen,2012本章目标•C++与C•C++的优点•C++中的数据类型(类类型)•引用类型•函数重载、参数默认值•C++中的动态内存分配3C++Copyrightzm.chen,2012C++与C的关系和区别•在C语言中引入了面向对象的思想;•是一种混合型的语言,同时支持结构化程序设计和面向对象程序设计方法;•兼容C语言,可不加修改地使用C语言代码;•允许数据抽象,支持封装、继承和多态等特征。4C++Copyrightzm.chen,2012C++标准库•直接使用标准C中所有库,如以下是常用的标准C函数库头文件:stdio.hstdlib.hstring.hctype.h•C++编译器都提供有完整的标准库;•C++标准库中的几乎所有内容都是在命名空间std中定义的;•使用C++标准库将获得非常多的功能。5C++Copyrightzm.chen,2012关键字•关键字是系统已经预定义的单词,有专用的定义。这些关键词都是保留字,用户不可再重新定义;•C++区分大小写,关键字全部由小写字母组成。标准C++(ISO14882)定义了74个关键字,具体的C++编译器还会做一些增删;•boolwchar_tclassfriendprivateprotectedpublicasmexplicitnamespaceoperatortemplatethistypenameusingvirtualthrowtrydeletefalsenewtrueconst_castdynamic_castreinterpret_caststatic_castexportmutabletypeid6C++Copyrightzm.chen,2012数据类型分类C++中数据有常量和变量之分,它们分别属于以下这些类型7C++的数据类型基本数据类型自定义数据类型布尔型(bool)字符型(char/wchar_t)整型(int)实型数组型(类型[])指针型(类型*)构造数据类型类(class)空类型(void)单精度型(float)双精度型(double)结构体型(struct)联合体型(union)枚举型(enum)C++Copyrightzm.chen,2012数据类型概述•基本数据类型有4种:整型(int)、实型(float、double)、字符型(char)、逻辑型(bool)•空类型void:用于显示说明一个函数不返回任何值;•构造类型(又称为组合类型):是由基本类型按照某种规则组合而成的;•指针类型:变量用于存储另一变量的地址,而不能用来存放基本类型的数据;•类类型:是体现面向对象程序设计的最基本特征,也是体现C++与C最大的不同之处。8C++Copyrightzm.chen,2012bool类型•逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++6.0中为1个字节。•声明方式:boolresult;result=true;•可以当作整数用(true一般为1,false为0)•把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false9C++Copyrightzm.chen,2012结构体位段•C++定义结构体中,可以为其成员定义时指定所占的位数(1个字节为8个位)10structDate{intyear:20;intmonth:6;intday:6;};•C++中的结构体支持类的所有特性•内存对齐C++Copyrightzm.chen,2012强制类型转换•强制类型转换格式如下:–type(表达式),例如:int(num);–(type)表达式,例如:(int)num;•作用:将表达式强制转换为type类型,但表达式的值及其类型不变•新增的强制类型转换运算符:–格式:static_casttype(表达式)–例如:doubleroot=3.14;intvalue=static_castint(root);11C++Copyrightzm.chen,2012域运算符•C++中增加的作用域标识符::–用于对与局部变量同名的全局变量进行访问–用于表示类的成员,这将在关于类的一节中详细说明12#includestdio.hintvar=1;main(){intvar=0;printf(var=%d\n,var);//局部变量var=::var;//引用全局变量printf(aftervar=::var%d,var);}C++Copyrightzm.chen,2012动态分配内存•静态分配内存:在编译时确定了固定的内存地址与内存大小,如:函数里的静态局部变量、全局变量等•动态分配内存:由程序控制,运行时主动性的向系统申请所需大小的内存段,并且每次分配到的内存地址不固定•C++可以使用malloc、realloc、calloc和free函数实现,也可以使用运算符new和delete实现13C++Copyrightzm.chen,2012new运算符•new运算符可以用于创建堆空间•成功返回首地址,失败返回NULL•语法:–指针变量=new数据类型;–指针变量=new数据类型[长度];•例如:int*p;p=newint;char*pStr=newchar[50];14C++Copyrightzm.chen,2012delete运算符•delete运算符可以用于释放堆空间•语法:delete指针变量;delete[]指针变量;•例如:deletep;delete[]pStr;15C++Copyrightzm.chen,2012动态分配内存示例2-1#includestdlib.h#includestdio.hintmain(){int*a;inti,num;printf(Pleaseenterthenumberofintegers:);scanf(%d,num);a=newint[num];16C++Copyrightzm.chen,2012动态分配内存示例2-2if(a==NULL){printf(mallocerror!exit.\n);return1;}for(i=0;inum;i++)scanf(%d,&a[i]);for(i=0;inum;i++)printf(%5d,a[i]);printf(\n);delete[]a;return0;}17C++Copyrightzm.chen,2012函数重载3-1•C++允许用相同的函数名来定义一组功能相同或类似的函数,程序的可读性增强•函数重载又称为函数的多态性•函数重载不同形式:–形参数量不同–形参类型不同–形参的顺序不同–形参数量和形参类型都不同•调用重载函数时,编译器通过检查实际参数的个数、类型和顺序来确定相应的被调用函数18C++Copyrightzm.chen,2012函数重载3-2•合法的重载例子:–intabs(inti);–longabs(longl);–doubleabs(doubled);•非法的重载例子:–intabs(inti);–longabs(inti);–voidabs(inti);//如果返回类型不同而函数名相同、形参也相同,则是不合法的,编译器会报语法错误。19C++Copyrightzm.chen,2012函数重载3-320#includestdio.hintmax(intx,inty);doublemax(doublex,doubley);voidmain(){inta=10,b=20,c;doublex=200.3,y=400.6,z;c=max(a,b);z=max(x,y);printf(%4d%5.1f\n,c,z);}intmax(intx,inty){printf(intfunction\n);if(xy)returnx;elsereturny;}doublemax(doublex,doubley){printf(doublefunction\n);if(xy)returnx;elsereturny;}C++Copyrightzm.chen,2012带默认形参值的函数•函数声明或者定义的时候,可以给形参赋一些默认值;•调用函数时,若没有给出实参,则按指定的默认值进行工作;21•函数没有声明时,在函数定义中指定形参的默认值;•函数既有定义又有声明时,声明时指定后,定义后就不能再指定默认值;•默认值的定义必须遵守从右到左的顺序,如果某个形参没有默认值,则它左边的参数就不能有默认值;–voidfunc1(inta,doubleb=4.5,intc=3);//合法–voidfunc1(inta=1,doubleb,intc=3);//不合法•函数调用时,实参与形参按从左到右的顺序进行匹配。C++Copyrightzm.chen,2012带默认形参值的函数22#includestdio.hdoublepower(doublex=10.0,intn=2);voidmain(){printf(power(3,5)=%d\n,power(3,5));printf(power(3)=%d\n,power(3));printf(power()=%d\n,power());}doublepower(doublex,intn){inti;doubles=1.0;for(i=1;i=n;i++)s*=x;returns;}C++Copyrightzm.chen,2012带默认形参值的函数的二义性•重载的函数中如果形参带有默认值时,可能产生二义性23#includestdio.hintadd(intx=5,inty=6);floatadd(intx=5,floaty=10.0);voidmain(){inta;floatb;a=add(10,20);b=add(10);printf(a=%d\n,a);printf(b=%d\n,b);}intadd(intx,inty){returnx+y;}floatadd(intx,floaty){returnx+y;}b=add(10)语句产生二义性性,可以认为该语句是调用第一个函数,也可以是第二个,因此编译器(报错)不能确定调用的是哪一个函数。C++Copyrightzm.chen,2012内联函数2-1•当程序执行函数调用时,系统要建立栈空间,保护现场,传递参数以及控制程序执行的转移等等,这些工作需要系统时间和空间的开销。有些情况下,函数本身功能简单,代码很短,但使用频率却很高,程序频繁调用该函数所花费的时间却很多,从而使得程序执行效率降低。•为了提高效率,一个解决办法就是不使用函数,直接将函数的代码嵌入到程序中。但这个办法也有缺点,一是相同代码重复书写,二是程序可读性往往没有使用函数的好。•为了协调好效率和可读性之间的矛盾,C++提供了另一种方法,即定义内联函数,方法是在定义函数时用修饰词inline。24C++Copyrightzm.chen,2012内联函数2-2//读入一行字符串,逐个判断是否为数字字符:#includeiostream.hinlineIsNumber(charch){returnch=′0′&&ch=′9′?1:0;}voidmain(){charch;while(cin.get(ch),ch!=′\n′){if(IsNumber(ch))cout″是数字字符″endl;elsecout″不是数字字符″endl;}}//因使用频度很高,说明为内联函数。25C++Copyrightzm.chen,2012引用类型•引用是一种特殊的变量,可以认为
本文标题:C++职业培训课件与笔记
链接地址:https://www.777doc.com/doc-3747363 .html