您好,欢迎访问三七文档
C++面向对象程序设计AnIntroductiontoObject-OrientedProgrammingUsingC++《C++面向对象程序设计》教学内容第1章C++概述第2章类和对象第3章面向对象程序设计概述第4章进一步学习类和对象第5章堆与复制构造函数第6章继承性:派生类第7章运算符重载第8章虚函数和多态性第9章模板第10章类库和C++的标准模板库STL第11章输入输出流第12章异常处理第一章第1章C++概述C++ABetterC1.1C++起源和特点1.1.1C++的起源1.1.2C++的特点1.2C++程序的结构1.2.1C程序与C++程序比较1.2.2C++程序结构1.2.3C++程序的编辑、编译和运行C程序与C++程序比较之一main(){inta,b,sum;/*定义三个整型变量*/a=123;b=456;sum=a+b;printf(sumis%d\n,sum);}main(){inta,b,sum;//定义三个整型变量a=123;b=456;sum=a+b;coutsum;}C程序与C++程序比较之二#includestdio.hmain(){chara,b,c;a='B';b='O';c='Y';putchar(a);putchar(b);putchar(c);}#include“iostream.hvoidmain(){chara,b,c;a='B';b='O';c='Y';coutabc;}1.3C++的一些新特性1.3.1单行注释和新的I/O流1.3.2const修饰符1.3.3内联函数1.3.4函数原型1.3.5带缺省参数的函数1.3.6函数名重载1.3.7new和delete运算符1.3.8引用(reference)1.3.1单行注释和新的I/O流//I/Ostream#includeiostream.hmain(){inti;floatf;chars[80];coutEnteraninteger,float,andstring:;cinifs;coutHere'syourdata:i''fendls'\n';return0;}单行注释和新的I/O流(续)cout是预定义的输出流对象,类似于C语言中的stdout。输出运算符,可用于输出C++语言中任何基本类型的数据。cin是预定义的输入流对象,类似于C语言中的stdin。输入运算符,可用于输入C++语言中任何基本类型的数据。(注意:输入和输出并不是C++语言的组成部分,它们由流库iostream支持。)输入含有空格的字符串//Usegetline()toreadastringthatcontainsspaces.#includeiostream#includefstreamusingnamespacestd;intmain(){charstr[80];coutEnteryourname:;cin.getline(str,79);coutstr'\n';return0;}1.3.2const存取修饰符•对象A:亲爱的,你千万不能变心?•对象B:放心吧!亲爱的。•对象A:你发誓!•对象B:不用发誓,因为我是const!const对象B;常量Constants在C中,可以使用#define来定义符号常量。C++提供了一种更灵活、更安全的方式来定义常量,即使用关键字const来定义符号常量。常量例子ConstantexamplesconstfloatPI=3.1415926;//PI是一个常量constintv[]={1,2,3,4};//数组元素v[i]是常量constintx;//error:noinitializer//定义常量时应初始化,否则出错。voidf(){model=200;//errorv[2]++;//error}值替换valuesubstitution#defineBUFSIZE100constintbufsize=100;Becauseofsubtlebugsthatthepreprocessormightintroduce,youshouldalwaysuseconstinsteadof#definevaluesubstitution.常量const和指针•指针所指向的对象为常量Pointertoconst•指针本身为常量constpointer•Theconstmodifiesthethingitis“closestto.”指向常量的指针Pointertoconstconstint*u;//pointertoconstant*u=18;//error:upointstoconstantu=p;//OK常指针constpointerintd=1;int*constw=&d;*w=2;//OKw=p;//error:wisconstconst修饰函数参数voidprint_salary(constfloat*salary){coutsalary’\n’;}const可以阻止参数被函数修改const的其他用途Otherusesofconst•returntypes,•classobjects•andmemberfunctionsvolatile存取修饰符•修饰符volatile通知编译器,变量值可能由程序中没有显示说明的方式所改变,因此在作编译优化时,不要通过将该变量放入寄存器来提高速度。•Volatile原意是:可变的,不稳定的externvolatileclock;externconstvolatileclock;1.3.3内联函数(内嵌函数,内置函数inlinefunction)在函数声明或定义的前面加上关键字“inline”,该函数就被声明为内联函数。inlineintmax(intx,inty)//max被说明为内联函数{intz;if(xy)z=x;elsez=y;return(z);}内联函数的调用方法与普通函数没有区别。类中定义的内联函数InlinefunctionAnyfunctiondefinedwithinaclassbodyisautomaticallyinline,classDate{intday,month,year;public:voidinit_date(intdd,intmm,intyy){day=dd;month=mm;year=yy;}};Hereinit_dateisainlinefunction函数调用时的时间开销1.函数调用时的时间开销:保护现场,恢复现场。2.用关键字inline说明内嵌函数。编译器直接用内嵌函数体的编译代码插入在函数调用语句处,这一过程称为函数的嵌入扩展。利用内嵌函数减少了调用普通函数时的压栈和弹栈操作,从而提高程序的运行速度。3.内嵌函数比带参数的宏的好处。一般情况下,只有较短的函数才定义为内嵌函数。使用内嵌函数实际上是一种增加空间开销以减小时间开销的方法。为什么使用内联函数Efficiency效率在C程序中,可使用宏macros达到同样的目的,但是宏是通过预处理来处理的,不进行类型检查,容易造成难以发现的错误。宏macros在类的内部不能使用,宏不能作为类的成员。为什么使用内联函数(cont.)为了克服宏的上述缺陷,C++引入了内联函数。内联函数具有高效率,而且:进行类型检查,避免出现类型不匹配的错误。可以作为类的成员函数。Toretaintheefficiencyofthepreprocessormacro,buttoaddthesafetyandclassscopingoftruefunctions,C++hastheinlinefunction.Howdoinlinefunctionswork编译器处理内联函数的过程类型检查Typechecking(Toassuresafety)将函数代码插入到函数调用处thensubstitutesthefunctionbodyforthefunctioncall这样函数代码将占据更所得存储空间TheinlinecodedoesoccupyspaceTheshort,smallandfrequentlycalledfunctionsaresuitableforinlinefunctions.1.3.4函数原型(functionprototype)•什么是函数原型?•描述函数原型的三大要素:–函数名–参数类型–函数返回值类型•函数原型的例子:inttranslate(floatx,floaty,floatz);inttranslate(float,float,float);【例1.7】voidsqr_it();/*functiondeclaration*/intmain(){intx;x=10;sqr_it(x);printf(Thesquareofxis%d\n,x);return0;}voidsqr_it(int*i){*i=(*i)*(*i);}运行时出错•【例1.7】本例的C程序能够成功通过诸如TurboC这样的C编译器的检查,但会在运行阶段发生错误。•该程序运行后的结构显示如下:Thesquareofxis10Nullpointerassignment使用函数原型执行强类型检查【例1.8】voidsqr_it(int*i);//函数原型intmain(){intx;x=10;sqr_it(x);coutThesquareofxisx'\n';return0;}voidsqr_it(int*i){*i=(*i)*(*i);}typemismatch类型不匹配函数原型的作用•C++语言是强类型化语言,任何函数在使用以前必须有该函数的原型说明,以便进行实际参数与形式参数之间的类型匹配检查。•函数返回值的类型和函数参数的类型、个数、次序在函数声明,函数定义和函数调用时必须匹配。•C++语言的编译器执行上述检查能显著减少很多隐藏的错误。函数原型与C语言的函数类型说明•函数原型是在C语言的函数类型说明(函数声明)的基础上进行扩充后形成的,•它不但说明了函数返回值的类型,还要确定函数参数的类型、个数、次序及缺省值。1.3.5带缺省参数的函数例如:以下函数带有一个缺省值为0的参数。voidmyfunc(doubled=0.0){…}myfunc(198.234);//passanexplicitvaluemyfunc();//letfunctionusedefault缺省参数的例子voidDrawCircle(intx,inty,intr=10);DrawCircle(50,20);DrawCircle(50,100,30);带缺省参数函数主要由两个作用:简化编程;有利于程序扩充,而不影响原有代码。1.3.6函数名重载(overload)•两或两个以上的函数共享同一个名称,就称为函数名重载。•OverloadedFunctions•Multiplefunctionscanhavethesamenamewithdifferentimplementations.•函数重载简化了函数调用工作。函数重载的例子#includeiostream.h//Overloadabs()threewaysintabs(intn);longabs(longn);doubleabs(doublen);//prototypeisneccessaryforC++compiler这些都是函数原型函数重载的例子main(){coutAbsolutevalueof-10:abs(-10)\n;coutAbsolutevalueof-10L:abs(-10L)\n;coutAbsolutevallueof-10.01:abs(-10.01)\n;return0;}abs()forints//abs()forintsintabs(intn){coutInintergerabs()\n;return
本文标题:第1章C++ 概述
链接地址:https://www.777doc.com/doc-4017746 .html