为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 《C++面向对象程序设计》谭浩强

《C++面向对象程序设计》谭浩强

2022-05-11 58页 ppt 947KB 19阅读

用户头像 个人认证

正方体

暂无简介

举报
《C++面向对象程序设计》谭浩强C++语言设计第一章C++的初步知识青岛理工大学吕秀艳参考教材选用教材《C++面向对象程序设计》谭浩强参考教材《C++Primer》中文版StanleyB.lippman著【C++程序设计课程安排】1.C++语言特点。2.C++语言语法、C++程序设计示例。3.上机实验(16/48学时)1.1从C到C++C语言是结构化和模块化的语言,C程序的设计者必须细致地设计程序中的每个细节,准确地考虑程序运行时每一时刻发生的事情,当程序规模变大时,结构化程序设计就显得力不从心。为了解决软件设计危机,在20世纪80年代提出了面向对象的程序设...
《C++面向对象程序设计》谭浩强
C++语言第一章C++的初步知识青岛理工大学吕秀艳参考教材选用教材《C++面向对象程序设计》谭浩强参考教材《C++Primer》中文版StanleyB.lippman著【C++程序设计课程安排】1.C++语言特点。2.C++语言语法、C++程序设计示例。3.上机实验(16/48学时)1.1从C到C++C语言是结构化和模块化的语言,C程序的设计者必须细致地设计程序中的每个细节,准确地考虑程序运行时每一时刻发生的事情,当程序规模变大时,结构化程序设计就显得力不从心。为了解决软件设计危机,在20世纪80年代提出了面向对象的程序设计思想(OOP)在实践中人们发现C语言使用如此广泛,如果在它的基础上发展一种面向对象的语言,一定会让大众容易接收这种语言,所以产生了C++。1.1从C到C++AT&T发布的第一个C++编译系统是一个预编译器,它把C++代码转换成C代码,然后再用C编译系统生成目标代码。1988产生第一个C++编译系统1989C++2.0类的多重继承1991C++3.0类的模板C++4.0异常处理、命名空间1997ANSI发布C++1.1从C到C++C++既可以用于面向过程的结构化程序设计,也可用于面向对象的程序设计。C++对C的增强体现在两个方面:1.对原来的面向过程机制做了扩充。2.增加了面向对象的机制。学习C++之后,既可以进行面向对象的程序设计,也可以进行面向过程的程序设计。C++语言C语言※与C语言兼容※是C语言的一个超集※绝大多数C语言代码无须修改就可以直接在C++程序中使用※支持面向对象程序设计支持面向过程的程序设计【C++语言与C语言的关系】**【VisualC++6.0编程开发环境简介】1.2最简单的C++程序例1.1输出一行字符“ThisisaC++program.”。#include//用cout输出时需要用//此头文件usingnamespacestd;//使用命名空间stdintmain(){cout<<"ThisisaC++program.\n";//上面用C++的方法输出一行return0;}(1)标准C++规定main必须声明为int类型,如果程序正常运行,向操作系统返回一个零值,否则返回非零值,通常是-1。(2)C++程序中可以用/*…*/做注释,可以用//做注释。前者可以做多行注释,后者只做单行注释。(3)C++程序中常用cout、cin进行输出输入,cout是C++定义的输出流对象,<<是插入运算符。(4)使用cout、cin需要用头文件iostream,在程序开始要用#include声明包含的头文件。(5)usingnamespacestd;意思是使用命名空间。C++标准库中的类和函数是在命名空间std中声明的,因此程序中如用C++标准库中的有关内容(此时需要用#include命令行),就要用usingnamespacestd;语句声明。例1.2求a和b两个数之和//求两数之和#include//预处理命令usingnamespacestd;//使用命名空间stdintmain()//主函数首部{//函数体开始inta,b,sum;//定义变量cin>>a>>b;//输入语句sum=a+b;//赋值语句cout<<"a+b="<usingnamespacestd;intmain(){intmax(intx,inty);//对max函数作声明inta,b,c;cin>>a>>b;c=max(a,b);//调用max函数cout<<"max="<y)z=x;elsez=y;return(z);}例1.4包含类的C++程序#includeusingnamespacestd;classStudent//声明一个类,类名为Student{private://以下为类中的私有部分intnum;//私有变量numintscore;//私有变量scorepublic://以下为类中公用部分voidsetdata()//定义公用函数setdata{cin>>num;//输入num的值cin>>score;}//输入score的值voiddisplay()//定义公用函数display{cout<<"num="<>name;cin>>age;cout<<"yournameis"<usingnamespacestd;intmain(){intv1=1,v2=3;cout<<"thesumof"<
与思考C语言中,用#define定义符号常量:#definePI3.14159#defineRa+b它只是在预编译时进行字符置换,将标识符置换成表达式或数字。预编译后,标识符PI,R不再存在。PI,R不是变量,没有类型,不占用存储单元,很容易出错:inta=1;b=2;#definePI3.14159#defineRa+bcout<usingnamespacestd;floatarea(floatr){returnr*r*3.14159;}//先定义intmain(){floatradius;cout<<“Pleaseinputradius:“;cin>>radius;if(radius>0)cout<usingnamespacestd;floatarea(float);//先声明intmain(){floatradius;cout<<“Pleaseinputradius:“;cin>>radius;if(radius>0)cout<intmax(inta,intb,intc){if(b>a)a=b;if(c>a)a=c;returna;}floatmax(floata,floatb){if(b>a)a=b;returna;}longmax(longa,longb,longc){if(b>a)a=b;if(c>a)a=c;returna;}voidmain(){inta,b,c,d;floatx,y,z;longm,n,p,q;cin>>a>>b>>c;cin>>x>>y;cin>>m>>n>>p;d=max(a,b,c);cout<<“int_d=“<返回类型函数模板名(数据参数表){函数模板定义体}示例:将上述重载示例改为函数模板。#includeusingnamespacestd;//默认使用std标准库名templateTmax(Ta,Tb,Tc)//建立函数模板时,只需要{if(b>a)a=b;//将函数类型、参数类型int换成T就行。if(c>a)a=c;//即用虚拟的类型名T代替实际的类型returna;}intmain(){inti=8,j=3,k=4,h;longm=1,n=2,p=3,q;h=max(i,j,k);q=max(m,n,p);cout<<“int_h=“<由此程序可以看到,函数模板比函数重载更方便,但模板只适用于函数的参数个数相同而类型不同,且函数体相同的情况。不满足这种情况时,就只能使用函数重载。注意1.3.6有默认参数的函数背景:一般情况下,函数调用时,形参从实参那里取得值。因此要求实参的个数和类型应该与形参相同。但是,有时候,多次调用同一函数时用的是同一实参数,或者调用时还不好确定实参数。C++提供一个简单的解决办法,即给参数一默认值。这样当不提供实参数时,形参就用默认参数作为参数值。示例:有一函数声明为:floatarea(floatr=6.5);调用area函数时,如果不提供实际参数给r,r就以默认数值6.5作为参数顶用area:area();//相当于area(6.5);注意:1)当有多个参数时,如果只有部分参数有默认值,则指定了默认值的参数必须放在参数表的最右边,否则出错。因为实参与形参的结合是从左至右顺序进行的,第一个实参必须给第一个形参,第二个实参必须给第二个形参…。1.3.6有默认参数的函数声明:voidarea(floatx1,intx2=1,charx3=‘a’);调用:area(1.2,3,‘b’);//形参值全部由实参得到area(1.2,3);//最后一个参数取自默认值area(1.2);//最后两个参数取自默认值area();//出错,第一个形参没有实参,也没有默认值2)一个函数不能既作为重载函数,又作为默认参数函数。因为当调用函数时如果少写一实际个参数,系统无法判断是利用重载函数还是利用默认参数函数。1.3.7变量的引用(reference)什么叫引用?变量的引用就是变量的别名。建立引用的作用,是为一个变量另取一个名字,以便在需要的时候间接地引用该别名。如何使用引用?假如有一个变量a,想给它另取一个别名b,可以这样写:inta;int&b=a;//声明b是一个整形变量的引用变量,并且被初始化为a此处&不代表取地址,只是“引用声明符”。对一个变量声明一个引用,并不另外开辟内存空间。b和a代表同一个变量单元。引用不是独立的变量,编译系统不给它分配存储单元。因此建立引用只有声明,没有定义,只是声明和某一个变量的关系。1.3.7变量的引用(reference)声明了一个变量的引用后,在本函数执行期间,该引用一直与代表的变量相联系,不能再作为另一个变量的别名。请看如下示例:inta,b;int&c=a;int&c=b;//错误,c已经是a的引用,不能再作为另一个变量b的引引用不是独立的数据类型,它必须与某一种类型的数据相联系:int&x;//错误,没有指定x代表哪个变量示例:#includeusingnamespacestd;intmain(){inta=10;int&b=a;a=a*a;cout<<“b=“<voidswap(inta,intb){inttemp;temp=a;a=b;b=temp;}voidmain(){inti=3,j=5;swap(i,j);cout<voidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}voidmain(){inti=3,j=5;swap(&i,&j);cout<voidswap(int&a,int&b){inttemp;temp=a;a=b;b=temp;}voidmain(){inti=3,j=5;swap(i,j);cout<说明
:不能建立void类型的引用。因为任何实际存在的变量都属于非void类型。void&a=9;//错误不能对数组名进行引用,因为数组名只代表数组首地址,本身不是变量不占有存储空间。charc[6]=“hello”;char&r=c;//错误可以建立指针变量的引用:inti=5;int*p=&i;//定义指针变量p,指向iint*&t=p;//t是指向整形变量的指针变量的引用,初始化为p.1.3.7变量的引用(reference)可以将引用的地址赋给指针。此时,指针指向原来变量:inta=3;int&b=a;int*p=&b;//指针p指向变量a的引用b,相当与指向a不能定义指向引用类型的指针变量:int&*p=&a;//错误可以用常量或表达式对引用初始化,但必须用const限定:constint&c=3;//合法1.3.7变量的引用(reference)引入原因:目的是为了解决程序中函数调用的效率问题。函数调用时需要时间和空间的代价。1.3.8内联函数(inlinefunction)main(){statement;fun1();statement;}fun1(){statement;fun2();statement;return;}fun2(){statement;return;}保存返回地址及当前现场恢复函数main的现场,取得返回地址保存返回地址及当前现场恢复函数fun1的现场,取得返回地址函数调用的执行过程而有时一些函数代码很短(1~5行),却有高使用频率,造成处理现场的开销巨增。这时若将函数体嵌入函数调用处,则可避免每次调用函数的开销,大大提高效率。1.3.8内联函数(inlinefunction)在声明一个函数时,加上限定词inline,该函数就成为内联函数。编译时,系统将调用此函数的地方用函数的原代码替换。即以空间代价换取时间。例如:#includeinlineintpower(intx)//定义一个内联函数{returnx*x;}voidmain(){cout<floata=1.5;voidmain(){inta=5;cout<inti(5);//外部全局变量externvoidfunc(){cout<字符串定义:strings1;//定义字符串变量s1strings2=“China”;//定义字符串变量s2并初始化字符串赋值:可以对定义了的字符串变量进行赋值:s1=“Hello”;s2=s1;s3=s1+s2;//字符串连接字符串变量的输入输出:stringc1;cin>>c1;cout<=,<=来进行字符串的比较1.3.10字符串变量字符串数组:也可以直接定义字符串数组:stringname[4]={“张三”,”李四”,”王五”,”刘六”};运行结果为:name[0]=“张三“;name[1]=“李四”;name[2]=“王五”;name[3]=“刘六”;1.3.10字符串变量示例:从键盘输入3个字符串,并按字典顺序输出:#include#includeusingnamespacestd;voidmain(){strings1,s2,s3,temp;cin>>s1>>s2>>s3;if(s2>s3){temp=s2;s2=s3;s3=temp;}if(s1>s2){temp=s1;s1=s2;s2=temp;}if(s2>s3){temp=s2;s2=s3;s3=temp;}cout<"<"<#includeusingnamespacestd;structStudent{stringname;intage;};voidmain(){Student*p;p=newStudent;p->name=“zhangsan";p->age=20;cout<<"name="<name<<";"cout<<"age="<age<
/
本文档为【《C++面向对象程序设计》谭浩强】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索