C++教程——谭浩强.ppt_第1页
C++教程——谭浩强.ppt_第2页
C++教程——谭浩强.ppt_第3页
C++教程——谭浩强.ppt_第4页
C++教程——谭浩强.ppt_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

第2章C+语言基础,本章要点:C+的数据类型、运算符和表达式。C+的控制结构。面向对象程序设计方法。类与对象。,2.1C+语言概述,C+是在20世纪80年代早期由贝尔实验室设计的一种在C语言基础上增加了对面向对象程序设计的支持语言,是既适合于作为系统描述语言,也适合于编写应用软件的既面向对象又面向过程的一种混合型程序设计语言。,2.1.1C+的发展历程,在C语言推出之前,操作系统等系统软件主要是用汇编语言编写的(如著名的UNIX操作系统)。最初的C语言只是为描述和实现UNIX操作系统而提供的一种程序设计语言,1973年,贝尔实验室的K.Thompson和D.M.Ritchie两人合作把UNIX操作系统的90以上的代码进行了重写,形成了UNIXV操作系统。后来C又经过多次改进并在1978年后被移植到微型机上,C语言逐渐成为风靡全球的计算机程序设计语言。,2.1.1C+的发展历程,上世纪80年代,美国AT/在屏幕输出字符串coutthisisthefirstC+program.endl;/输出字符串和换行intx=5;/定义整型变量xcoutx5int*p=/定义指针变量p,2.4.1指针的定义与使用,在使用指针变量前,一定要进行初始化或有确定的地址值,否则会产生错误。一个指针可以被一个具有相同类型的对象的左值初始化。为取得一个对象的左值必须引入一个新的运算符,这个新的运算符被称为取地址运算符,其符号是“,2.4.3指针与数组,数组中所有元素都是依次存储在内存单元中的,每个元素都有相应的地址。C+又规定数组名代表数组中第一个元素的地址,即数组的首地址。例如,当有下列的数组定义时:inta10;则a所表示的地址就是元素a0的地址。,2.4.3指针与数组,若定义了指针:int*pa;则pa=/当expression为真时执行该语句elsestatement2;/当expression为假时执行此语句这里的if、else是C+的关键字,当if后面的表达式expression为“真”时,将执行statement1。当expression为“假”时,statement2被执行。,2switch语句,switch语句用来测试某一个变量具有多个值时所执行的动作。switch语句的语法形式为:switch(expression)caseconstant1:statement1;break;caseconstant2:statement2;break;default:statement;其中,switch、case、default都是关键字,当表达式的值与case中某个表达式的值相等时,就执行该case中“:”后面的所有语句。若case中所有表达式的值都不等于switch表达式的值,则执行default:后面的语句,若default不存在,则跳出switch结构。,3条件运算符,条件运算符可以简化条件表达式的表示形式,其语法形式如下:expression1?expression2:expression3即表达式expression1为真时执行expression2的表达式,结果为假时执行表达式expression3。,2.5.3循环结构,C+中提供了3种循环语句:while语句、dowhile语句和for语句。这些循环语句在许多情况下可以相互替换。,1while循环语句,while循环结构具有下列形式:while(expression)statement;只要expression表达式的值为“真”,就重复执行statement语句。,2dowhile循环语句,dowhile循环语句总能保证循环体被执行一次,其形式如下:doStatement;while(expression);注意,在dowhile循环结构中,while语句的括号内指定循环的条件,该句结尾处应以分号“;”结束。,3for循环语句,For语句通常用于处理具有固定长度的数据结构,例如数组等。下面是for循环语句的语法结构:for(expression1;expression2;expression3)statement;其用法和执行过程同C语言基本相同。,4break和continue语句,在C+程序中,若需要跳出循环结构或重新开始循环,就得使用break和continue语句,例如:while(i100)break;/跳出循环,执行cout语句statement1;coutUserBreak!;,4break和continue语句,continue语句与break语句不同,它并不中止整个循环的进行,而仅仅中止当前这一次循环的运行。例如:while(i100)continue;/跳出本次循环,继续下次循环statement1;cout”,例如,下面的例程中,主函数通过指向类对象的指针调用类的成员函数。,2.9构造函数和析构函数,1构造函数构造函数是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象的其他内部管理操作。构造函数的特点是构造函数的名字和它所在的类名相同,当定义该类的对象时,构造函数完成对此对象的初始化。它可以接收参数并允许重载。当一个类含有多个构造函数时,编译程序为了确定调用哪一个构造函数,需要把对象中使用的参数和构造函数的参数表进行比较,这个过程与在普通的函数重载中进行选择的过程是一样的。,2.9构造函数和析构函数,下面的程序中定义了一个包含构造函数的类。classstudentprivate:intnum;floatscore;public:student(intNO,floatS)/声明类student的构造函数num=NO;score=S;,2.9构造函数和析构函数,2析构函数析构函数也是类中的特殊成员函数,与定义它的类具有相同的名字,但要在前面加一个波浪号()。析构函数没有参数,也没有返回值,而且也不能重载,因此一个类中只能有一个析构函数。析构函数执行与构造函数相反的操作,通常用于释放分配给对象的存储空间。当程序超出类对象的作用域时,或者当对一个类指针使用运算符delete时,系统将自动调用析构函数。和构造函数一样,如果在类的定义中不定义析构函数,编译系统将自动产生一个默认的析构函数,对于大多数类来说,默认的析构函数就能满足要求。如果在一个对象完成其操作之前还需要做一些内部处理,则应定义析构函数。,2.10方法重载,重载是C+的一个重要特征,它包含函数重载和操作符重载。,2.10.1函数重载,所谓函数重载是指同一个函数名可以对应着多个函数的实现。函数重载允许一个程序内声明多个名称相同的函数(这与C语言是不同的),这些函数可以完成不同的功能,并可以带有不同类型、不同数目的参数及返回值。使用函数重载可以减轻用户的记忆负担,并使程序的结构简单、易懂。在C语言中,可以看到这样的库函数:intabs(intx)、doublefabs(doublex)。这两个函数都是求某个数的绝对值,但不同的是,前者是求一个整数的绝对值,后者是求一个浮点数的绝对值。可见,由于函数参数类型的不同,要分别完成求整数和浮点数绝对值的任务,必须分别调用两个不同名称的函数abs()和fabs(),这无疑增加了记忆负担。在C+语言中,可以给这两个函数起相同的名称,在函数调用时,系统会自动根据调用参数类型的不同来选择正确的函数版本,这就叫做函数的重载。,2.10.2操作符重载,操作符重载的能力增强了C+语言的可扩充性,对操作符的重载是将C+语言中已有的操作符赋予新的功能,但与该操作符的本来含义不冲突,使用时只需根据操作符出现的位置来判断其具体执行哪一种运算。C+中单目运算、双目运算、动态内存管理运算符new和delete以及指针、引用等运算操作均可以重载,但要注意的是,由于单目运算操作只能有一个参数,因此重载+和-运算操作时,不可能区分是前置操作还是后置操作。使用操作符重载时,必须用以下的方式来声明成员函数:函数类型operator#(形参表),2.11继承,类是C+中进行数据封装的逻辑单位,C+还提供了一种继承机制,利用这种机制,用户可以通过增加、修改或替换给定类中的方法来对这个类进行扩充,以适应不同的应用要求。,2.11.1类的继承性,类的继承性,又叫类的派生性,是指从一个已经存在的类(基类)派生出一个新的类(派生类),派生类可以继承基类的部分或全部数据成员和成员函数,再增加新的数据成员和成员函数。MFC(微软基础类库)是微软公司为了方便VisualC+程序开发而设计的一套类库,Windows程序员一般都要在此类库的基础上进行开发,这无疑极大地减轻了工作量,因此类的派生性提高了程序代码的重用性。,2.11.1类的继承性,2.11.2多重继承,派生类的基类可以有一个,也可以有多个。如果只有一个基类,则这种继承方式叫做简单继承;如果基类名有多个,则这种继承方式称为多重继承。各个基类名之间用逗号隔开。多重继承的格式与简单继承的格式基本相同,其一般用法如下所示:class派生类名:访问属性基类名表新增加的数据成员;新增加的成员函数;,2.12多态性和虚拟函数,简单地讲,多态性就是一种实现“一种接口,多种方法”的技术,是面向对象程序设计的重要特性。,2.12.1多态性,面向对象的语言多数都支持多态性,从本质上讲,多态性可以引用多个类的实例。利用多态性,可以在基类和派生类中使用同样的函数名而定义不同的操作,从而实现“一个接口,多个方法”,这是一种在运行时出现的多态性,它通过派生类和虚拟函数来实现。虚拟函数是在基类中的成员函数前加上virtual,然后在派生类中再加以定义的函数。当用指向派生类的对象的基类指针对函数进行访问时,系统将根据运行时指针所指向的实际对象来确定调用哪一个派生类的成员函数版本。当指针指向不同的对象时,执行的是虚拟函数的不同版本。,2.12.1多态性,用多态性可以实现自上而下的设计方法。这是一种从全局出发,用类的层次结构来模拟客观世界的程序设计方法。通俗地说,多态性是指用一个相同的名字定义不同的函数,这些函数执行过程不同,但是有相似的操作,即用同样的接口访问不同的函数。运算符重载和函数重载就是一种多态性,这是编译时的多态性,也称静态多态性。而运行时的多态性则称为动态多态性。,2.12.2虚拟函数,1基类的指针在C+的类中,基类的指针可以指向派生类的对象,即基类的指针可以取派生类对象的地址,但派生类的指针不可以指向基类的对象。,2.12.2虚拟函数,2虚拟函数虚拟函数就是在基类中与派生类重名的函数前,如student类中的display()函数前,加上关键字virtual,表示这个函数是虚拟函数。在派生类stud中的display()函数前可加virtual关键字也可以不加。这样基类的指针取派生类对象地址后,用这一指针调用display()函数,则调用的是派生类的display()函数,而非基类的display()函数。,2.12.3虚拟析构函数,C+中不可以定义虚拟构造函数,但是可以定义虚拟析构函数。如果在基类和派生类中都定义了析构函数,而且希望程序能够根据需要执行基类中的析构函数或者派生类中的析构函数,则必须把基类中的析构函数定义为虚拟析构函数,否则不能实现多态性。虚拟析构函数以关键字virtual开头,这样定义后,基类中的析构函数及派生类的析构函数全部都是虚拟析构函数。虚拟析构函数的概念虽然十分简单,但它在面向对象程序设计中却是一种十分重要的技巧。一般的处理方法是,当在程序中定义了基类和派生类时,把基类中的析构函数设置为虚拟析构函数。,2.13输入/输出流,C+中把数据之间的传输操作称作流。在C+中,流既可以表示数据从内存传送到某个载体或

温馨提示

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

评论

0/150

提交评论