VisualC程序设计教程C语言基础和面向对课件_第1页
VisualC程序设计教程C语言基础和面向对课件_第2页
VisualC程序设计教程C语言基础和面向对课件_第3页
VisualC程序设计教程C语言基础和面向对课件_第4页
VisualC程序设计教程C语言基础和面向对课件_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

1、VisualC程序设计教程C语言基础和 面向对1 第2章 C+语言基础和面向对象 n2.1 C+语言基础 n2.2 类 n2.3 面向对象的编程技术 VisualC程序设计教程C语言基础和 面向对2 2.1 C+语言基础 nVisual C+的基础是C+语言,利用 Visual C+所编译、运行的程序,小到 一个界面程序,大到一个大型软件,无 一不是用C+语言写出来的。因此,要 学好Visual C+,必须对C+语言有深 入的了解。 VisualC程序设计教程C语言基础和 面向对3 2.1.1 编程基础 n1源文件源文件 n源文件由语句组成。语句用来确定 计算机要执行什么操作。例如,下 面这一

2、行语句完成了计算半径为10 厘米的圆的面积: n area=3.14*10*10; n 每一个语句都要以分号结尾。 n VisualC程序设计教程C语言基础和 面向对4 n2main函数函数 nmain函数不返回数值,main函数中的第 一行将被计算机最先执行到。 n 3数据的输出数据的输出 n 当程序中出现cout可实现数据的输入。例如: n cina; n用户输入数值后,这个数值被存入变量a中。 n5预处理预处理 n#include预处理指令告诉编译器装入一个 include文件。例如cin和cout被定义在称为 iostream.h的文件中(其中.h是头文件的标准 扩展名)。 Visua

3、lC程序设计教程C语言基础和 面向对6 2.1.2数据类型 nC+提供了许多预先定义的数据类型,用户可以把不同的数 据类型组合起来构造更复杂的数据类型。 n1基本数据类型 nchar一一表示字符。如a、b和*都是字符。该类型 数据占一个字节的空间。 nfloat一一表示浮点数。即带有小数点的数字,例如3.14、- 1.50和20.0等等,浮点数有时也称作实数。浮点数的取值范 围是3.1410-38到3.41038。该类型数据占四个字节 的空间。 ndouble一一表示双精度数。双精度数的取值范围是 1.710-308到1.710308。该类型数据占八个字节的 空间。 nint表示整数。整数是不

4、包含小数点的数。例如,0,3, 30和-59都是整数,但是1.0不是整数。整数的取值范围是- 32768到32767。该类型数据占二个字节的空间。 VisualC程序设计教程C语言基础和 面向对7 n除上述一些常见的数据类型外,还有如下一些数据类 型: nlong一一表示长整型数。取值范围是-2147483648到 2147483647。该类型数据占四个字节的空间。 nShort一一表示短整型数。取值范围是-32768到32767。 该类型数据占二个字节的空间。 nunsigned一一表示无符号整型数。它表示数值总是正 的整数。例如unsigned int类型的表示的范围是0到 65535。

5、nvoid一一无类型数,用来表明函数不返回值。如:void main()。 VisualC程序设计教程C语言基础和 面向对8 2.1.2数据类型 2聚合数据类型 C+语言还提供了几种聚合数据类型,包 括数组、指针、结构、联合、位域和枚举。本 书稍后章节将对部分类型做详细介绍。 VisualC程序设计教程C语言基础和 面向对9 3类型安全性 nC+对数据类型有严格的要求,如果把一个变量声明 为一种类型,而在实际使用时又试图把它用作另外一 种类型,编译器就会产生错误。这种对数据类型的严 格要求称作类型安全性。例如: nint r; nr =“Hello!”; n将会出错,因为r是整型,所以不能给它

6、赋一个字符串, 因此,应该明确告诉编译器把一种数据类型转换成另 一种数据类型,这称作强制类型转换。要做到这一点, 只需在被转换的项前面加入要转换的数据类型名。 VisualC程序设计教程C语言基础和 面向对10 2.1.3 常量和变量 n1常量常量 n常量指的是在程序执行过程中不变的数据。它 有两种形式,其一是数值形式,如:3.14、 135、0.132e+02等;其二是标识符形式,称 为符号常量。要使一个标识符成为符号常量, 只须在声明前面加上const即可。例如: nconst int Length=3; nLength就是一个符号常量,其值为3。 VisualC程序设计教程C语言基础和

7、面向对11 2.1.3常量和变量 n2变量变量 n变量指的是在程序执行过程中其值可以变化的量,任 何一个变量必须有确定的名称。只需通过变量的名称, 便可以访问存储在变量内的信息。 n变量名由字母、数字和下划线组成,但有以下一些限 制: n变量名不能以数字开头; n变量名中不能有空格; n变量名中除了能使用26个英文字母外,只能使用“_”; n变量名不能与C+语言中的关键词同名。表2.1列出了 Visual C+的关键词; n变量名不能与C+中的库函数名相同。 VisualC程序设计教程C语言基础和 面向对12 3变量的作用域变量的作用域 n变量的作用域是指变量在程序中的有效使用范围。根 据变量

8、的作用域,变量可分为全局变量和局部变量两 种类型。 n全局变量是指在函数外部所定义的变量。两个全局变 量不能同名。 n局部变量是在函数内部定义的变量。在函数开始执行 时,局部变量被生成了,并只能在该函数内部使用。 当函数结束时,局部变量也随之消失。在函数内,一 个名称只能代表一个变量,但是在另一个函数内,这 个名称可代表另外一个变量。 n在函数中所定义形式参数也是局部变量。 VisualC程序设计教程C语言基础和 面向对13 nC+中的变量作用域的规则: n任何在函数内部定义的变量都是这个函数的局部变量。如 果在函数中定义了一个变量,则当函数调用时,这个变量 也随之生成,可在整个函数内部使用,

9、并且当函数结束时 随之消失。 n函数的所有形参都是这个函数的局部变量。 n在函数中,若局部变量和全局变量同名,则该函数所使用 的是局部变量,而不是同名的全局变量。 n如果在函数中使用了一个不属于该函数的局部变量,编译 程序将寻找同名的全局变量。在一个有某个局部变量的函 数中,如果要访问一个与此变量同名的全局变量,则在变 量名前加上:(作用域分辨符)。例如,有一个名为area 的全局变量,且函数中包含了名为area的局部变量,那么 用:area指的是全局变量,而用area指的是局部变量。 VisualC程序设计教程C语言基础和 面向对14 2.1.4 运算符 C+语言的运算符是告诉编译程序执行特

10、 定算术或逻辑操作的符号,C+语言内 部运算符主要有三类:算术运算符、关 系与逻辑运算符以及位操作运算符。 VisualC程序设计教程C语言基础和 面向对15 1算术运算符算术运算符 C+算术运算符主要有:+、-、*、/、%、+、-、 等,主要用于算术计算。这些运算符的使用相对简单, 下面我们重点讲述+运算符。 +运算符有两种形式,可以把它放在变量前面(这种 增量运算称为前增量),如+a,也可以把它放在变 量后面(这种增量运算称为后增量),如a+。 +a先把a的值增1,然后再引用a的值,+先引用a的 值,然后a的值增加1。 -运算符与+运算符类似。 VisualC程序设计教程C语言基础和 面向

11、对16 2关系运算符和逻辑运算符关系运算符和逻辑运算符 n关系运算符用于关系运算,比较左右两个表达式的大小或是 否相等,其运算结果为逻辑值“真”或“假”。逻辑运算符 表示操作数的逻辑关系,其运算结果同样也是逻辑值“真” 或“假”。表2.2介绍了在布尔表达式中常用的运算符。 VisualC程序设计教程C语言基础和 面向对17 VisualC程序设计教程C语言基础和 面向对18 2.1.4运算符 n3位操作运算符位操作运算符 n位操作是对字节或字中的位(bit)进行测试、 置位或移位处理,这里的字节或字是针对char 和int类型而言。位操作不能用于float、double、 long doubl

12、e、void或其他复杂类型。C+中的 位操作符主要包括: n在赋值过程中,赋值号右边的表达式的值被传 送到赋值号左边的变量中。可以在一个语句中 使用多个赋值符,使多个变量获得相同的值. n表2-3所列出的就是常用的复合赋值运算符。 VisualC程序设计教程C语言基础和 面向对20 2.1.4运算符 VisualC程序设计教程C语言基础和 面向对21 2.1.4运算符 5条件运算符条件运算符 条件运算符是由?和:合成实现的。条件 表达式具有 如下形式: expr1?expr2:expr3 它的含义是:如果expr1为真,就返回expr2的值。否则, 返回expr3的值。 6运算符的运算次序运算

13、符的运算次序 表2.4列出了运算次序。表中的运算符按优先级从高到低的 次序排列(最上方为最高优先级,最下方为最低优先级)。 同一行运算符具有相同的优先级。 VisualC程序设计教程C语言基础和 面向对22 VisualC程序设计教程C语言基础和 面向对23 2.1.5 C+语言的3种程序结构 nC+语言的3种程序结构有:顺序结构、 选择结构和循环结构。顺序结构是指计 算从第一条语句到最后一条语句完全按 顺序执行;选择结构是根据用户输入或 中间结果去执行若干不同的任务;循环 结构是指在程序的某处,需要根据某项 条件重复地执行某项任务若干次或直到 满足或不满足某条件为止。 VisualC程序设计

14、教程C语言基础和 面向对24 n1选择结构选择结构 n选择控制语句主要包括ifelse语句和 switch、case语句。 nif语句是在当条件为真时,执行一系列操 作;当条件为假时,执行另外一系列操 作,if的语法格式: VisualC程序设计教程C语言基础和 面向对25 2.1.5 C+语言的3种程序结构 nif(expr) n sent1; nelse n sent2; nexpr代表表达式,例如i1。sent1和sent2代表 语句,例如cost=cost+1。 nexpr可以代表任何一个表达式,如果这个表达 式为真,就执行sent1,否则,执行sent2。 VisualC程序设计教程

15、C语言基础和 面向对26 n还可以不要else来构成if语句,其形式是: nif(expr) n sent; VisualC程序设计教程C语言基础和 面向对27 n与if语句不同,switch、case语句专门处理多路 分支的情况,其语法格式为: nSwitch(expr) ncase va11:sent 1; ncase val2:sent 2; n ncase valn:sent n ndefault: sent n+1; n VisualC程序设计教程C语言基础和 面向对28 n首先,确定expr的值并且与val1进行比较(val代表某个确定的值, 如1或453)。如果expr与val1

16、数值相等,那么就执行sent1和它后 面的所有语句。如果expr与val1的数值不相等,那么expr再继续 与va12比较,以此类推。如果没有与expr相匹配的值,那么就执 行sent n+1。下面的程序段用于输出数字14的英文字符。 nSwitch(n) ncase 1:coutone;break; ncase 2:couttwo;break; ncase 3:coutthree;break; ncase4:coutfour;break; ndefault:cout”unknown number; n n注意,在每个case语句中都要使用break。 VisualC程序设计教程C语言基础和

17、面向对29 2.1.5 C+语言的3种程序结构 n2循环结构循环结构 n循环结构主要包括for语句、while语句和do while语句。 nfor语句用于反复执行某些语句,其语法格式如下: nfor(expr1;expr2;expr3) nsent; n先确定expr1表达式,expr1通常用于初始化循环中用 到的变量;然后计算expr2表达式(每次进入循环都必 须执行这一步);如果expr2为真,就执行sent,接着 就执行expr3;然后再计算expr2表达式;如果expr2为 真,就重复上述步骤,直到expr2为假,循环就结束, 程序继续执行for循环后面的语句。 VisualC程序设

18、计教程C语言基础和 面向对30 n如同for语句一样,while循环也是重复多 次执行语句,其语法格式是: nwhile(expr) nsent; n在while循环开始时,先确定expr,如果 表达式为真,就执行sent;然后,再确 定expr,如果表达式仍为真,就再执行 sent。这个过程一直持续到expr为假时为 止。 VisualC程序设计教程C语言基础和 面向对31 ndo-while语句的语法格式: ndo n sent; nwhile(expr); ndo-while构成另一种循环控制,类似于while循环。两 者的区别是,使用while循环,表达式在执行while内部 语句之前

19、进行判定。因此,使用while有可能不执行任 何语句。而do语句是先执行语句,再确定是否符合条 件,以决定是否继续。如果条件为真,再次执行语句。 否则,循环停止。 VisualC程序设计教程C语言基础和 面向对32 2.1.6函数 1函数的定义和调用函数的定义和调用 2形式参数形式参数 函数中定义形参的方法如下: 函数类型 函数名(data_type1 arg1, data_type2 arg2,.) VisualC程序设计教程C语言基础和 面向对33 3函数返回值函数返回值 n函数要得到一个返回值,必须注意以下两点: n在声明函数时,函数名前面写上要返回数据的类型, 而不要写void。 n在

20、函数中用return来返回函数的值。 nreturn关键词可以起到立刻离开函数并返回一个值的作 用。如果在一个函数的中间使用了return,执行return 命令后,return后面的程序代码就不被执行。 VisualC程序设计教程C语言基础和 面向对34 2.1.7指针 指针是C+中一类非常重要的数据类型,它可以更 好地表示复杂的数据结构,有些其他数据类型无法 或很难实现的操作,都可以利用指针来完成。 1指针的定义方法指针的定义方法 定义一个指针变量格式如下: 类型 *指针变量名; 例如: int *pointer; 定义一个整型指针变量pointer。 VisualC程序设计教程C语言基础

21、和 面向对35 2.1.7指针 n2指针的地址指针的地址 n使用指针之前,必须给它赋值,也就是说,必须把要 指向的内存地址填入指针。 n要把一个变量的地址送入指针变量,方法是: n指针变量= nint number=10; npointer= ncoutValue; n在C+程序中经常可以看到“指针-成员”的表示法。 VisualC程序设计教程C语言基础和 面向对39 n5动态分配内存动态分配内存 n利用new命令可以动态地分配内存,其方法是: n指针=new 类型; n当使用new生成一个指针时,唯一能够记录这个内存地址位置的就是 指针。例如程序代码: nint *pointer; npoi

22、nter=new int; n*pointer=15; npointer=new int; n在代码的最后一行为pointer分配了新的内存。虽然整数15仍然保留在 内存内,但是,由于pointer存储的内容不再是数据15所在的地址,所 以无法访问它。 n如果不再使用为指针变量所分配的内存空间,就应释放这些空间,这 个处理过程称为“释放内存”。方法是: ndelete 指针变量; VisualC程序设计教程C语言基础和 面向对40 2.1.7指针 n6字符串与指针字符串与指针 n字符串表示一个连续的字符序列。在处理字符 串时,用指向字符串第一项的指针可以访问字 符串。例如程序段: nchar

23、*mystring=”Visual C+ 6.0”; n产生了一个内容为 ”Visual C+ 6.0”的字符串。 变量mystring是指向这个字符串的指针。 n用程序段: ncout mystring; n则可以输出字符串。 VisualC程序设计教程C语言基础和 面向对41 2.1.8数组 数组可以生成包含相同类型的若干个变量。数组中的 每个元素都有一个标号,称之为下标(index),使用 数组的下标可以立即访问到数组中的任意一个数组元 素。 VisualC程序设计教程C语言基础和 面向对42 1数组的声明和数组元素的使用数组的声明和数组元素的使用 在生成一个数组之前,需要声明数组中的元

24、素数目。例如: int arr20; 生成了一个具有20个数组元素的一维数组。其中第1个元素为arr0, 最后一个元素为arr19。 访问数组元素时,只需在变量名称后面的方括号内写上数组的下标。 例如: int arr20; arr0=20; arr1=3; Coutarr0; Cout3*arr1; 输出结果为20和30。 VisualC程序设计教程C语言基础和 面向对43 2.1.8数组 n2数组初始化数组初始化 n在声明数组时,把元素的值也同时输入,称为 数组的初始化。例如: nint arr5=9,4,5,6,7; n初始化的结果是:arr0=9,arr1=4, arr2=5,arr3

25、=6,arr4=7。 n也可以任意输入几项的值。例如: nint arr5=9,4,5; n初始化的结果是:arr0=9,arr1=4, arr2=5,arr3=0,arr4=0。 VisualC程序设计教程C语言基础和 面向对44 n3字符串数组字符串数组 n在程序中也可以生成一个字符串数组并 且对它进行初始化。下面程序段生成并 初始化了一个字符串数组,然后进行打 印显示: nchar *foo3=hello,”goodbye, how are you”; ncoutfoo0foo1foo2endl; VisualC程序设计教程C语言基础和 面向对45 n4多维数组多维数组 n在定义多维数组

26、时,数组有几维,就用几个 。 例如,下面的程序代码段生成了一个二维数组, 共有12个数组元素: nint arr34; n访问数组中的元素时,也是有几维就用几个 , int arr34所定义的12个数组元素是: arr00,arr01,arr02,arr03, arr10,arr11,arr12,arr13, arr20,arr21,arr22,arr23。 VisualC程序设计教程C语言基础和 面向对46 2.2 类的声明和定义 n类是一种复杂的数据类型,它是将不同 类型的数据和与这些数据相关的操作封 装在一起的集合体。这有点像C语言中的 结构,惟一不同的就是结构没有定义所 说的“数据相关

27、的操作”,“数据相关 的操作”就是平常经常看到的“方法”, 因此,类具有更高的抽象性,类中的数 据具有隐藏性,类还具有封装性。 VisualC程序设计教程C语言基础和 面向对47 n类的结构(也即类的组成)是用来确定一类 对象的行为的,而这些行为是通过类的 内部数据结构和相关的操作来确定的。 这些行为是通过一种操作接口来描述的 (也即平时所看到的类的成员函数),使用 者只关心的是接口的功能(也就是只关心 类的各个成员函数的功能),对它是如何 实现的并不感兴趣。而操作接口又被称 为这类对象向其他对象所提供的服务。 VisualC程序设计教程C语言基础和 面向对48 2.2 类 n“类”就是对具有

28、相同数据和相同操作的 一组相似对象的定义,即类是对具有相 同特征和行为的一个或多个对象的描述。 在面向对象编程中,“类”是一个最重 要的概念。 VisualC程序设计教程C语言基础和 面向对49 2.2.1 类及其成员变量与函数的 声明和定义 1类的定义格式 类的定义格式一般地分为说明部分和实现部分。说明部分将告诉 使用者“做什么”,而实现部分是告诉使用者“怎么做”。 2类的一般定义格式如下: class public: protected: private: ; VisualC程序设计教程C语言基础和 面向对50 2.2.1 类及其成员变量与函数的声明和定义 3定义类时应注意的事项 (1)在

29、类体中不允许对所定义的数据成员进行初始化。 (2)类中的数据成员的类型可以是任意的,包含整型、 浮点型、字符型、数组、指针和引用等,也可以是对 象。 (3)一般地,在类体内先说明公有成员,它们是用户所 关心的,后说明私有成员,它们是用户不感兴趣的。 在说明数据成员时,一般按数据成员的类型大小,由 小至大说明,这样可提高时空利用率。 (4)经常习惯地将类定义的说明部分或者整个定义部分 (包含实现部分)放到一个头文件中。 VisualC程序设计教程C语言基础和 面向对51 2.2.2 构造函数和析构函数 n1构造函数 n构造函数用于创建一个类实例(对象)时自动完成的工作,如相 关数据成员初始化等。

30、构造函数具有以下特征: n构造函数的名字与类名相同,否则编译程序将把它当作一般的成 员函数来处理。 n构造函数没有返回值,在声明和定义构造函数时是不能说明它的 类型的。 n构造函数的功能是对对象进行初始化,且一般只对数据成员做初 始化。在构造函数中一般不做赋初值以外的的事情。 n构造函数不能像其他成员函数那样被显式地调用,它在对象创建 时被调用。 n在一个类中可以定义多个构造函数。 VisualC程序设计教程C语言基础和 面向对52 2.2.2 构造函数和析构函数 n拷贝构造函数是一种特殊的构造函数,其形参为本类 的对象引用。拷贝构造函数有一个指向类对象的引用 作为形式参数,传统上被声明为“c

31、onst”。 nclass 类名 n public : n 类名(形参);/构造函数 n 类名(类名 /圆心坐标 ndouble r;/半径 nCIRCLE(int a, int b, double x)/构造函数 nx=a; y=b; r=x; n nCIRCLE() /构造函数重载 npublic: nvoid draw(); nvoid outcenter(); nvoid outrad(); n VisualC程序设计教程C语言基础和 面向对78 n当需要创建一个类的实例时,自动调用构造函数,如: nCIRCLE c1,c2(1,1,2.5); n其中c1的创建调用了无参的构造函数,而c2的创建自动为三个私 有属性成员赋初值。 n当一个类需要被继承时,子类的构造函数就需要同时传递参 数到父类的构造函数,以期在生成子类对象的同时调用父类的构 造函数. n 写明定义方式,如这里就可以说: n如A是B的派生类 nA:A():B() n n n VisualC程序设计教程C语言基础和 面向对79 n2)多继承中的构造函数 n多继承是一种复杂的继承关系,是由多个父类派生子 类的过程。 VisualC程序设计教程C语言基础和 面向对80 2.3.4 多态和虚函数 n多态(polymorphism)是指属于不同类 的对象对同一消息做出不同的响应

温馨提示

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

评论

0/150

提交评论