《Visual C++程序设计教程》第二章C++语言基础和面向对.ppt_第1页
《Visual C++程序设计教程》第二章C++语言基础和面向对.ppt_第2页
《Visual C++程序设计教程》第二章C++语言基础和面向对.ppt_第3页
《Visual C++程序设计教程》第二章C++语言基础和面向对.ppt_第4页
《Visual C++程序设计教程》第二章C++语言基础和面向对.ppt_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

第2章C+语言基础和面向对象,2.1C+语言基础2.2类2.3面向对象的编程技术,2.1C+语言基础,VisualC+的基础是C+语言,利用VisualC+所编译、运行的程序,小到一个界面程序,大到一个大型软件,无一不是用C+语言写出来的。因此,要学好VisualC+,必须对C+语言有深入的了解。,2.1.1编程基础,1源文件源文件由语句组成。语句用来确定计算机要执行什么操作。例如,下面这一行语句完成了计算半径为10厘米的圆的面积:area=3.14*10*10;每一个语句都要以分号结尾。,2main函数main函数不返回数值,main函数中的第一行将被计算机最先执行到。3数据的输出当程序中出现cout可实现数据的输入。例如:cina;用户输入数值后,这个数值被存入变量a中。5预处理#include预处理指令告诉编译器装入一个include文件。例如cin和cout被定义在称为iostream.h的文件中(其中.h是头文件的标准扩展名)。,2.1.2数据类型,C+提供了许多预先定义的数据类型,用户可以把不同的数据类型组合起来构造更复杂的数据类型。1基本数据类型char一一表示字符。如a、b和*都是字符。该类型数据占一个字节的空间。float一一表示浮点数。即带有小数点的数字,例如3.14、-1.50和20.0等等,浮点数有时也称作实数。浮点数的取值范围是3.1410-38到3.41038。该类型数据占四个字节的空间。double一一表示双精度数。双精度数的取值范围是1.710-308到1.710308。该类型数据占八个字节的空间。int表示整数。整数是不包含小数点的数。例如,0,3,30和-59都是整数,但是1.0不是整数。整数的取值范围是-32768到32767。该类型数据占二个字节的空间。,除上述一些常见的数据类型外,还有如下一些数据类型:long一一表示长整型数。取值范围是-2147483648到2147483647。该类型数据占四个字节的空间。Short一一表示短整型数。取值范围是-32768到32767。该类型数据占二个字节的空间。unsigned一一表示无符号整型数。它表示数值总是正的整数。例如unsignedint类型的表示的范围是0到65535。void一一无类型数,用来表明函数不返回值。如:voidmain()。,2.1.2数据类型,2聚合数据类型C+语言还提供了几种聚合数据类型,包括数组、指针、结构、联合、位域和枚举。本书稍后章节将对部分类型做详细介绍。,3类型安全性C+对数据类型有严格的要求,如果把一个变量声明为一种类型,而在实际使用时又试图把它用作另外一种类型,编译器就会产生错误。这种对数据类型的严格要求称作类型安全性。例如:intr;r=“Hello!”;将会出错,因为r是整型,所以不能给它赋一个字符串,因此,应该明确告诉编译器把一种数据类型转换成另一种数据类型,这称作强制类型转换。要做到这一点,只需在被转换的项前面加入要转换的数据类型名。,2.1.3常量和变量,1常量常量指的是在程序执行过程中不变的数据。它有两种形式,其一是数值形式,如:3.14、135、0.132e+02等;其二是标识符形式,称为符号常量。要使一个标识符成为符号常量,只须在声明前面加上const即可。例如:constintLength=3;Length就是一个符号常量,其值为3。,2.1.3常量和变量,2变量变量指的是在程序执行过程中其值可以变化的量,任何一个变量必须有确定的名称。只需通过变量的名称,便可以访问存储在变量内的信息。变量名由字母、数字和下划线组成,但有以下一些限制:变量名不能以数字开头;变量名中不能有空格;变量名中除了能使用26个英文字母外,只能使用“_”;变量名不能与C+语言中的关键词同名。表2.1列出了VisualC+的关键词;变量名不能与C+中的库函数名相同。,3变量的作用域,变量的作用域是指变量在程序中的有效使用范围。根据变量的作用域,变量可分为全局变量和局部变量两种类型。全局变量是指在函数外部所定义的变量。两个全局变量不能同名。局部变量是在函数内部定义的变量。在函数开始执行时,局部变量被生成了,并只能在该函数内部使用。当函数结束时,局部变量也随之消失。在函数内,一个名称只能代表一个变量,但是在另一个函数内,这个名称可代表另外一个变量。在函数中所定义形式参数也是局部变量。,C+中的变量作用域的规则:任何在函数内部定义的变量都是这个函数的局部变量。如果在函数中定义了一个变量,则当函数调用时,这个变量也随之生成,可在整个函数内部使用,并且当函数结束时随之消失。函数的所有形参都是这个函数的局部变量。在函数中,若局部变量和全局变量同名,则该函数所使用的是局部变量,而不是同名的全局变量。如果在函数中使用了一个不属于该函数的局部变量,编译程序将寻找同名的全局变量。在一个有某个局部变量的函数中,如果要访问一个与此变量同名的全局变量,则在变量名前加上:(作用域分辨符)。例如,有一个名为area的全局变量,且函数中包含了名为area的局部变量,那么用:area指的是全局变量,而用area指的是局部变量。,2.1.4运算符,C+语言的运算符是告诉编译程序执行特定算术或逻辑操作的符号,C+语言内部运算符主要有三类:算术运算符、关系与逻辑运算符以及位操作运算符。,1算术运算符C+算术运算符主要有:+、-、*、/、%、+、-、等,主要用于算术计算。这些运算符的使用相对简单,下面我们重点讲述+运算符。+运算符有两种形式,可以把它放在变量前面(这种增量运算称为前增量),如+a,也可以把它放在变量后面(这种增量运算称为后增量),如a+。+a先把a的值增1,然后再引用a的值,+先引用a的值,然后a的值增加1。-运算符与+运算符类似。,2关系运算符和逻辑运算符关系运算符用于关系运算,比较左右两个表达式的大小或是否相等,其运算结果为逻辑值“真”或“假”。逻辑运算符表示操作数的逻辑关系,其运算结果同样也是逻辑值“真”或“假”。表2.2介绍了在布尔表达式中常用的运算符。,2.1.4运算符,3位操作运算符位操作是对字节或字中的位(bit)进行测试、置位或移位处理,这里的字节或字是针对char和int类型而言。位操作不能用于float、double、longdouble、void或其他复杂类型。C+中的位操作符主要包括:在赋值过程中,赋值号右边的表达式的值被传送到赋值号左边的变量中。可以在一个语句中使用多个赋值符,使多个变量获得相同的值.表2-3所列出的就是常用的复合赋值运算符。,2.1.4运算符,2.1.4运算符,5条件运算符条件运算符是由?和:合成实现的。条件表达式具有如下形式:expr1?expr2:expr3它的含义是:如果expr1为真,就返回expr2的值。否则,返回expr3的值。6运算符的运算次序表2.4列出了运算次序。表中的运算符按优先级从高到低的次序排列(最上方为最高优先级,最下方为最低优先级)。同一行运算符具有相同的优先级。,2.1.5C+语言的3种程序结构,C+语言的3种程序结构有:顺序结构、选择结构和循环结构。顺序结构是指计算从第一条语句到最后一条语句完全按顺序执行;选择结构是根据用户输入或中间结果去执行若干不同的任务;循环结构是指在程序的某处,需要根据某项条件重复地执行某项任务若干次或直到满足或不满足某条件为止。,1选择结构选择控制语句主要包括ifelse语句和switch、case语句。if语句是在当条件为真时,执行一系列操作;当条件为假时,执行另外一系列操作,if的语法格式:,2.1.5C+语言的3种程序结构,if(expr)sent1;elsesent2;expr代表表达式,例如i1。sent1和sent2代表语句,例如cost=cost+1。expr可以代表任何一个表达式,如果这个表达式为真,就执行sent1,否则,执行sent2。,还可以不要else来构成if语句,其形式是:if(expr)sent;,与if语句不同,switch、case语句专门处理多路分支的情况,其语法格式为:Switch(expr)caseva11:sent1;caseval2:sent2;casevaln:sentndefault:sentn+1;,首先,确定expr的值并且与val1进行比较(val代表某个确定的值,如1或453)。如果expr与val1数值相等,那么就执行sent1和它后面的所有语句。如果expr与val1的数值不相等,那么expr再继续与va12比较,以此类推。如果没有与expr相匹配的值,那么就执行sentn+1。下面的程序段用于输出数字14的英文字符。Switch(n)case1:coutone;break;case2:couttwo;break;case3:coutthree;break;case4:coutfour;break;default:cout成员”的表示法。,5动态分配内存利用new命令可以动态地分配内存,其方法是:指针=new类型;当使用new生成一个指针时,唯一能够记录这个内存地址位置的就是指针。例如程序代码:int*pointer;pointer=newint;*pointer=15;pointer=newint;在代码的最后一行为pointer分配了新的内存。虽然整数15仍然保留在内存内,但是,由于pointer存储的内容不再是数据15所在的地址,所以无法访问它。如果不再使用为指针变量所分配的内存空间,就应释放这些空间,这个处理过程称为“释放内存”。方法是:delete指针变量;,2.1.7指针,6字符串与指针字符串表示一个连续的字符序列。在处理字符串时,用指向字符串第一项的指针可以访问字符串。例如程序段:char*mystring=”VisualC+6.0”;产生了一个内容为”VisualC+6.0”的字符串。变量mystring是指向这个字符串的指针。用程序段:coutmystring;则可以输出字符串。,2.1.8数组,数组可以生成包含相同类型的若干个变量。数组中的每个元素都有一个标号,称之为下标(index),使用数组的下标可以立即访问到数组中的任意一个数组元素。,1数组的声明和数组元素的使用在生成一个数组之前,需要声明数组中的元素数目。例如:intarr20;生成了一个具有20个数组元素的一维数组。其中第1个元素为arr0,最后一个元素为arr19。访问数组元素时,只需在变量名称后面的方括号内写上数组的下标。例如:intarr20;arr0=20;arr1=3;Coutarr0;Cout3*arr1;输出结果为20和30。,2.1.8数组,2数组初始化在声明数组时,把元素的值也同时输入,称为数组的初始化。例如:intarr5=9,4,5,6,7;初始化的结果是:arr0=9,arr1=4,arr2=5,arr3=6,arr4=7。也可以任意输入几项的值。例如:intarr5=9,4,5;初始化的结果是:arr0=9,arr1=4,arr2=5,arr3=0,arr4=0。,3字符串数组在程序中也可以生成一个字符串数组并且对它进行初始化。下面程序段生成并初始化了一个字符串数组,然后进行打印显示:char*foo3=hello,”goodbye,howareyou”;coutfoo0foo1foo2endl;,4多维数组在定义多维数组时,数组有几维,就用几个。例如,下面的程序代码段生成了一个二维数组,共有12个数组元素:intarr34;访问数组中的元素时,也是有几维就用几个,intarr34所定义的12个数组元素是:arr00,arr01,arr02,arr03,arr10,arr11,arr12,arr13,arr20,arr21,arr22,arr23。,2.2类的声明和定义,类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。这有点像C语言中的结构,惟一不同的就是结构没有定义所说的“数据相关的操作”,“数据相关的操作”就是平常经常看到的“方法”,因此,类具有更高的抽象性,类中的数据具有隐藏性,类还具有封装性。,类的结构(也即类的组成)是用来确定一类对象的行为的,而这些行为是通过类的内部数据结构和相关的操作来确定的。这些行为是通过一种操作接口来描述的(也即平时所看到的类的成员函数),使用者只关心的是接口的功能(也就是只关心类的各个成员函数的功能),对它是如何实现的并不感兴趣。而操作接口又被称为这类对象向其他对象所提供的服务。,2.2类,“类”就是对具有相同数据和相同操作的一组相似对象的定义,即类是对具有相同特征和行为的一个或多个对象的描述。在面向对象编程中,“类”是一个最重要的概念。,2.2.1类及其成员变量与函数的声明和定义,1类的定义格式类的定义格式一般地分为说明部分和实现部分。说明部分将告诉使用者“做什么”,而实现部分是告诉使用者“怎么做”。2类的一般定义格式如下:classpublic:protected:private:;,2.2.1类及其成员变量与函数的声明和定义,3定义类时应注意的事项(1)在类体中不允许对所定义的数据成员进行初始化。(2)类中的数据成员的类型可以是任意的,包含整型、浮点型、字符型、数组、指针和引用等,也可以是对象。(3)一般地,在类体内先说明公有成员,它们是用户所关心的,后说明私有成员,它们是用户不感兴趣的。在说明数据成员时,一般按数据成员的类型大小,由小至大说明,这样可提高时空利用率。(4)经常习惯地将类定义的说明部分或者整个定义部分(包含实现部分)放到一个头文件中。,2.2.2构造函数和析构函数,1构造函数构造函数用于创建一个类实例(对象)时自动完成的工作,如相关数据成员初始化等。构造函数具有以下特征:构造函数的名字与类名相同,否则编译程序将把它当作一般的成员函数来处理。构造函数没有返回值,在声明和定义构造函数时是不能说明它的类型的。构造函数的功能是对对象进行初始化,且一般只对数据成员做初始化。在构造函数中一般不做赋初值以外的的事情。构造函数不能像其他成员函数那样被显式地调用,它在对象创建时被调用。在一个类中可以定义多个构造函数。,2.2.2构造函数和析构函数,拷贝构造函数是一种特殊的构造函数,其形参为本类的对象引用。拷贝构造函数有一个指向类对象的引用作为形式参数,传统上被声明为“const”。class类名public:类名(形参);/构造函数类名(类名/圆心坐标doubler;/半径CIRCLE(inta,intb,doublex)/构造函数x=a;y=b;r=x;CIRCLE()/构造函数重载public:voiddraw();voidoutcenter();voidoutrad();,当需要创建一个类的实例时,自动调用构造函数,如:CIRCLEc1,c2(1,1,2.5);其中c1的创建调用了无参的构造函数,而c2的创建自动为三个私有属性成员赋初值。当一个类需要被继承时,子类的构造函数就需要同时传递参数到父类的构造函数,以期在生成子类对象的同时调用父类的构造函数.写明定义方式,如这里就可以说:如A是B的派生类A:A():B(),2)多继承中的构造函数多继承是一种复杂的继承关系,是由多个父类派生子类的过程。,2.3.4多态和虚函数,多态(polymorphism)是指属于不同类的对象对同一消息做出不同的响应,具体表现在函数调用的“一种接口,多种方法”特性。多态性广义地分为静态多态性和动态多态性。静态多态性是指一个实体同时以不同的形式存在。在C+中,静态多态性表现为函数重载(functionoverload)和运算符重载(operatoroverl

温馨提示

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

评论

0/150

提交评论