书签 分享 收藏 举报 版权申诉 / 83
上传文档赚钱

类型北京大学软件学院模板课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:2862997
  • 上传时间:2022-06-05
  • 格式:PPT
  • 页数:83
  • 大小:880.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《北京大学软件学院模板课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    北京大学 软件 学院 模板 课件
    资源描述:

    1、移动应用软件开发技术移动应用软件开发技术第二讲:第二讲:C+C+编程基础编程基础移动应用软件开发技术移动应用软件开发技术课程建设小组课程建设小组北京大学北京大学二零一一年二零一一年* *致谢:感谢致谢:感谢IntelIntel对本课程项目的支持对本课程项目的支持 C+编程基础编程基础3C+C+标识符标识符(Identifiers)(Identifiers)程序设计语言中为变量、常量、类型、程序设计语言中为变量、常量、类型、函数等取的名字称为标识符。函数等取的名字称为标识符。 标识符由大小写字母、数字和下划线组成,标识符由大小写字母、数字和下划线组成, 并且只能以字母或下划线开始。并且只能以字母

    2、或下划线开始。 例如:例如: 9 9abcabc、 * *abc abc 是不合法的标识符是不合法的标识符注意:注意: 标识符区分大小写标识符区分大小写 标识符长度任意标识符长度任意 提倡使用提倡使用“见名知义见名知义”的标识符的标识符 避免使用系统已定义的标识符(系统保留字)避免使用系统已定义的标识符(系统保留字)4关键字关键字 关键字在计算机中有预定的含义。关键字又称保关键字在计算机中有预定的含义。关键字又称保留字,它们不能再被用户重新定义使用。留字,它们不能再被用户重新定义使用。 auto bool break case catchauto bool break case catch c

    3、har class const const_cast continue char class const const_cast continue default delete do double else enum default delete do double else enum explicit extern false float for friend explicit extern false float for friend goto if inline int long mutable goto if inline int long mutable namespace new o

    4、perator private protected public namespace new operator private protected public register return short signed sizeof static register return short signed sizeof static struct switch template this throw true struct switch template this throw true try typedef typeid typename union unsigned try typedef

    5、typeid typename union unsigned using virtual void volatile while using virtual void volatile while 5注释符注释符 C+C+语言保留了语言保留了C C语言中以语言中以/ /* *开始,开始,* */ /结束结束的注的注释,这种方式适用于多行的注释释,这种方式适用于多行的注释 同时同时C+C+语言中还提供语言中还提供行注释符行注释符/,该注释在,该注释在它的行结束处结束,适用于短注释。它的行结束处结束,适用于短注释。6数据类型数据类型 数据类型是数据类型是不同形式的不同形式的信息在内存中分配方式信息

    6、在内存中分配方式的基本约定的基本约定(不同类型(不同类型的数据在内存中占用的的数据在内存中占用的字节数有所不同),字节数有所不同),是是构造程序的基础构造程序的基础。 常量、变量甚至函数都常量、变量甚至函数都具有自己的数据类型。具有自己的数据类型。类型名类型名说明符说明符整型整型intint字符型字符型charchar浮点型浮点型floatfloat布尔型布尔型boolbool空值型空值型voidvoid五种基本数据类型五种基本数据类型7类型名类型名字宽(字节)字宽(字节)范围范围short int232768 32767signed short int232768 32767unsigned

    7、 short int20 65535int42147483648 2147483647signed int42147483648 2147483647unsigned int40 4294967295long int42147483648 2147483647signed long int42147483648 2147483647unsigned long int40 4294967295char1128 127signed char1128 127unsigned char10 255float4double8long double8void032位机上各基本类型的字宽及表示范围位机上各基

    8、本类型的字宽及表示范围8变量变量 变量是在程序执行过程中,其值可以改变变量是在程序执行过程中,其值可以改变的量的量; ; 变量有变量有3 3个基本要素:个基本要素:名字名字类型类型值值9变量的名字变量的名字 是一种标识符,需用遵守标识符的规则是一种标识符,需用遵守标识符的规则 区分大小写区分大小写 mycar MyCar MYCAR 是三个变量名称是三个变量名称 不能使用关键字作为变量名不能使用关键字作为变量名 “见名知意见名知意” 常见命名方法:常见命名方法: my_book myBook iMyBook10变量的类型变量的类型 C+C+中的变量在使用前必须定义,定义变中的变量在使用前必须定

    9、义,定义变量时必须指明变量的量时必须指明变量的类型类型及及名字名字。 变量的类型包含数据类型和存储类型变量的类型包含数据类型和存储类型 定义或说明变量的格式:定义或说明变量的格式: ;例如:例如: static int my_car; static int my_car; 11变量的值变量的值 变量自身包含两个值:变量自身包含两个值:变量值:变量所表示的数据值变量值:变量所表示的数据值 地址值:变量在内存中的地址值地址值:变量在内存中的地址值 变量可以在定义时初始化,给变量赋一个初值变量可以在定义时初始化,给变量赋一个初值。例如:例如: int a=3,b=-78; double area=6

    10、7.34; 变量赋值,或更改变量值变量赋值,或更改变量值例如:例如: a=5; 取变量地址值:通过取变量地址值:通过“&”运算符来获得运算符来获得例如例如: : &a;12 C+C+提供另一种形式的初始化方法。例如,前面提供另一种形式的初始化方法。例如,前面两个语句可改写为:两个语句可改写为: int a(3) , b(-78) ; int a(3) , b(-78) ; double area(67.34) ; double area(67.34) ; 13常量的定义格式常量的定义格式定义格式:定义格式: const = 例如:例如:const double pi = 3.141592653

    11、;14整型常量整型常量 十进制整型常量十进制整型常量 由由09的数字组成,的数字组成,不能以不能以0开头,没前缀开头,没前缀 例如:例如:201 89 等等 八进制整型常量八进制整型常量 由由07的数字组成,的数字组成,以以0位前缀位前缀 例如:例如:032 024 等等 十六进制整型常量十六进制整型常量 由由09及及af字母组成,字母组成,0 x或或0X为前缀为前缀 例如:例如:0 x1a 0X3F 等等 长整型常量后缀长整型常量后缀L(l),无符号整型常量后缀,无符号整型常量后缀U(u) 例如:例如:123L 12322U 223212ul15字符串常量字符串常量 以一对双撇号括起来的字符

    12、序列以一对双撇号括起来的字符序列 例如:例如:“Hello world!n” 字符串常量中可以包含空格符、转义字符及字符串常量中可以包含空格符、转义字符及其他字符,也可以包含汉字。其他字符,也可以包含汉字。 由于双撇号是字符串的定界符,因此字符串中使由于双撇号是字符串的定界符,因此字符串中使用用”表示双撇号。表示双撇号。 字符串中字符的个数可以为任意数目字符串中字符的个数可以为任意数目 字符串常量后面有一个结束符字符串常量后面有一个结束符0 “a”与与a不同不同16运算符运算符 运算符是指用来表示在数据上执行运算符是指用来表示在数据上执行某些特定操作的某些特定操作的符号符号。参与运算的数据。参

    13、与运算的数据称为操作数。(可以分别称为单目、双称为操作数。(可以分别称为单目、双目和三目运算符)。目和三目运算符)。 算术运算符算术运算符 关系运算符关系运算符 逻辑运算符逻辑运算符 位操作运算符位操作运算符 赋值运算符赋值运算符 其他运算符其他运算符17 逻辑运算真值逻辑运算真值 表(真为非表(真为非0 0,假为,假为0 0)aba&ba|b!a!b0000110非非00110非非000101非非0非非0110018位操作运算符位操作运算符 位运算符是对其操作数按其二进制形式逐位进位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整数。行运算,参加位运算的操作数必须为整

    14、数。 C+中所有的位运算符如下:中所有的位运算符如下:(按位求反)(按位求反) (右移)(右移) &(按位与)(按位与)(按位异或)(按位异或) |(按位或)(按位或)19选择语句选择语句 利用选择语句可以实现具有选择结构的利用选择语句可以实现具有选择结构的程序程序 选择语句有两种选择语句有两种 条件语句(条件语句(if语句)语句) 开关语句(开关语句(switch语句)语句) 特点:具有一定的判断功能特点:具有一定的判断功能 可以根据给定的可以根据给定的条件条件来决定执行哪路分支中来决定执行哪路分支中的语句的语句20 C+ C+中有三种循环语句可用来实现循环结中有三种循环语句可用来实现循环结

    15、构:构:whilewhile语句语句、do_whiledo_while语句语句和和forfor语句语句。 这些语句各有各的特点,而且常常可以互这些语句各有各的特点,而且常常可以互相替代。在编程时应根据需要选择最适合的循环相替代。在编程时应根据需要选择最适合的循环语句。语句。循环语句循环语句21转向语句转向语句 goto 无条件转向语句无条件转向语句 ,很少使用,很少使用 break 退出语句退出语句 continue 结束本次循环语句结束本次循环语句转向语句用于改变语句的执行顺序转向语句用于改变语句的执行顺序22枚举的定义枚举的定义枚举类型和枚举变量的定义格式如下,其中枚举类型和枚举变量的定义

    16、格式如下,其中enum是枚举类型定义的关是枚举类型定义的关键字。键字。enum 枚举类型名枚举类型名 枚举常量名枚举常量名1,枚举常量名枚举常量名2,枚举变量枚举变量; /在定义枚举类型的同时定义枚举变量。在定义枚举类型的同时定义枚举变量。例如:例如:enum WeekDaySunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday today; 也可在枚举类型定义后再定义枚举变量,格式如下:也可在枚举类型定义后再定义枚举变量,格式如下:枚举类型名枚举类型名 枚举变量。枚举变量。如:如:WeekDay tomorrow;23枚举

    17、类型枚举类型void main()enum WeakDaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday ;WeakDay Today;Today=Friday;coutToday=Todayendl;Today=Sunday;coutToday=Todayendl;Today=5Today=024756-23 54107 a0 a1 a2 an-1图图 一维数组一维数组数组是一些意义上相关的同类型变量的有序集合。数组是一些意义上相关的同类型变量的有序集合。每个数组元素都是一个变量,用来存放不同的值。每个数组元素都是一个变量,用

    18、来存放不同的值。数组元素引用形式:数组元素引用形式: 数组名数组名 下标下标数组数组指针的概念指针的概念1.1.指针:指针: 即变量的内存地址。即变量的内存地址。2.2.指针变量指针变量 指针变量是一种特殊的变量:指针变量是一种特殊的变量: 它存放的不是数据的值,而是另一个变量的它存放的不是数据的值,而是另一个变量的地址地址。 指针变量常常直接简称为指针。指针变量常常直接简称为指针。 指针指针26一个指针在定义以后,并不具体地指向某个变量,而只一个指针在定义以后,并不具体地指向某个变量,而只是确定了类型。可以对指针进行初始化,让它指向某个具是确定了类型。可以对指针进行初始化,让它指向某个具体的

    19、变量。体的变量。 “&”是取地址运算符是取地址运算符,用在一个存储器操作数,用在一个存储器操作数的前面,表示取存储器操作数的地址值。例如:的前面,表示取存储器操作数的地址值。例如: float salary ; float *salary_ptr = &salary ; 就将指针就将指针salary_ptr初始化为变量初始化为变量salary的地址值,也即的地址值,也即指向了具体的指向了具体的salary。27指针的赋值和引用指针的赋值和引用 除了在指针定义时对它进行初始化外,还可以使用赋值运算除了在指针定义时对它进行初始化外,还可以使用赋值运算来来给指针赋以变量的地址值给指针赋以变量的地址值

    20、。例如:。例如: int a = - 8978 ; int *p ; p = &a ; 这里,这里,p被赋值为变量被赋值为变量a的地址。的地址。也可以将一个也可以将一个已被赋值的指针赋给另一个相同类型的指针已被赋值的指针赋给另一个相同类型的指针。例如:例如: double a ; double *x = &a , *y ; y = x ; 这样一来,这样一来,y就与就与x指向同一个变量指向同一个变量a。28一个关于指针的例子。 # include void main() int x = 50 ; int *x_ptr = &x ; / x_ptr指向x cout x = x endl ; /

    21、输出x的值 cout *x_ptr = *x_ptr endl ; / 输出x_ptr所指单元的值 cout x_ptr = x_ptr endl ; / 输出x_ptr的值 *x_ptr = 100 ; cout x = x endl ; cout *x_ptr = *x_ptr endl ; cout x_ptr = x_ptr endl ; 程序的输出为: x = 50 *x_ptr = 50 x_ptr = 0 x0065FDF4 x = 100 *x_ptr = 100 x_ptr = 0 x0065FDF429指针与整数进行的加、减运算,代表着指针在内存空间上、指针与整数进行的加、

    22、减运算,代表着指针在内存空间上、下移动。具体上移或下移的字节数与其类型密切相关。下移动。具体上移或下移的字节数与其类型密切相关。例如,假设在某字长为例如,假设在某字长为32的计算机中,一个的计算机中,一个int型数据占型数据占4个个字节,如果有字节,如果有 int a = 78 ; int *x = &a ; x初始化为指向变量初始化为指向变量a。在语句。在语句 x = x + 1 ; 执行后,执行后,x中存放的地址值被加了中存放的地址值被加了4,指向变量,指向变量a下面一个整下面一个整数。数。同理,语句同理,语句 x = x 1 ; 执行后,执行后,x指向了上一个整数。指向了上一个整数。指针

    23、运算指针运算30当当+或或 与与*同时作用于指针时,同样同时作用于指针时,同样应该注意运算的顺序。应该注意运算的顺序。例如例如: x = *p+ ; 相当于相当于 x = *(p+) ; 即先从当前地址中取值,然后将指针指向下即先从当前地址中取值,然后将指针指向下一个数据。一个数据。又如又如: x = *+p ; 相当于相当于 x = *(+p) ; 先将地址加先将地址加1,再取地址中的数据赋给,再取地址中的数据赋给x。而而 x = +*p ; 相当于相当于 x = +(*p) ; 表示先取表示先取p所指向的单元内的数据值,再将所指向的单元内的数据值,再将数据值加数据值加1后赋给后赋给x。31

    24、例:给出程序的运行结果#include void main() int a3 = 24,30,8; int *p;p=a;int x;x=*p+;coutx,*pendl;x=*+p;coutx,*pendl;x=+*p;coutx,*pendl;24,308,89,932函数定义与函数原型函数定义与函数原型C+中的函数由一段相对独立的程序组成,这段程序能实现某一方面独立和完整的功能。例例 求求5!+4!#include int factorial(int n) int z,i;z=1; for (i=1;i=n;i+) z=z*i;return z; void main()int x;x=

    25、factorial (5)+ factorial (4);cout”5!+4!=”xendl;程序运行结果:程序运行结果:5!+4!=144 (1) 形式参数:在被调用函数名后面的()内的变量称为形式参数:在被调用函数名后面的()内的变量称为形式参数(简称形式参数(简称“形参形参”)。)。(2) 实际参数:在调用函数名后面的()内中的表达式或实际参数:在调用函数名后面的()内中的表达式或变量称为实际参数(简称实参)。变量称为实际参数(简称实参)。 例例 求从键盘上输入的两数中的最大值求从键盘上输入的两数中的最大值#includevoid max(int x,int y);void main()

    26、int a,b;coutab;max(a,b);void max(int x,int y)int w; w=xy? x:y;coutThe big one of two input number is :wendl; 运行结果:运行结果:Please input two integers: 54 -89The big one of two input number is :54 程序中程序中 x, y 为形参,为形参,a, b 为实参。为实参。34函数的传值调用函数的传值调用例例 交换两个整数变量的值。交换两个整数变量的值。#includevoid exch(int x, int y)int

    27、z;z=x;x=y;y=z;void main()int a=3, b=5;exch(a,b);couta=a, b=bendl; /运行结果:运行结果:a=3, b=5变量变量a,b的值没有改变。的值没有改变。35函数的传址调用函数的传址调用 传址调用: 指针作函数参数例例 交换两个整数变量的值。交换两个整数变量的值。#includevoid exch(int *x, int *y)int z;z=*x;*x=*y;*y=z;void main()int a=3, b=5;exch(&a,&b);couta=a, b=bendl;/运行结果:运行结果:a=5, b=3变量变量a, b的值已经

    28、交换。的值已经交换。36动态内存分配动态内存分配 在在ANSI C中,中,malloc( )和)和free( ) C+C+兼容了兼容了C C语言中的这两个函数,并提语言中的这两个函数,并提供了两个新的操作符:供了两个新的操作符:new new 和和 deletedelete C+ C+程序运行时可以在内存区使用程序运行时可以在内存区使用newnew运算符和运算符和deletedelete运算符动态创建和运算符动态创建和删除变量。删除变量。37/动态分配动态分配#include stdio.h#include stdio.h“ /包含标准输入输出头文件包含标准输入输出头文件#include st

    29、dlib.h#include stdlib.h/包含动态存储分配函数头文件包含动态存储分配函数头文件void main()void main() int int * *p;p;/定义一个整型指针定义一个整型指针 p p/为指针为指针 p p 动态分配一个存储单元动态分配一个存储单元p = (int p = (int * *)malloc(sizeof(int);)malloc(sizeof(int);* *p = 6;p = 6;/将将6 6赋给指针赋给指针p p指向的存储单元指向的存储单元printf(%d,printf(%d,* *p);p);free(p);free(p);/释放释放 p

    30、 p 所指向的存储单元所指向的存储单元 38 例内存动态分配程序例内存动态分配程序#include void main()int *pc;coutpc=pcendl;pc=new int;coutpc=pcendl;*pc=10;coutpc=pcendl;cout*pc=*pcendl;delete pc;堆堆pc39 对于数组进行动态分配的格式为:对于数组进行动态分配的格式为:指针变量名指针变量名=new =new 类型名类型名 下标表达式下标表达式;delete delete 指向该数组的指针变量名指向该数组的指针变量名; ; 两式中的两式中的方括号方括号是非常重要的,两者必须配对是非常

    31、重要的,两者必须配对使用,如果使用,如果deletedelete语句中少了方括号,因编译语句中少了方括号,因编译器认为该指针是指向数组第一个元素的指针,器认为该指针是指向数组第一个元素的指针,会产生会产生回收不彻底回收不彻底的问题(的问题(只回收了第一个元只回收了第一个元素所占空间素所占空间),),加了方括号后就转化为指向数加了方括号后就转化为指向数组的指针,回收整个数组组的指针,回收整个数组。delete delete 的方括的方括号中号中不需要不需要填填数组元素数数组元素数,系统自知。即使写,系统自知。即使写了,编译器也忽略。了,编译器也忽略。 请注意请注意“下标表达式下标表达式”不是常量

    32、表达式不是常量表达式,即它,即它的值不必在编译时确定,的值不必在编译时确定,可以在运行时确定可以在运行时确定。40【例例 】动态数组的建立与撤销动态数组的建立与撤销#include #include void main()int n;char *pc;cout请输入动态数组的元素个数请输入动态数组的元素个数n; /在运行时确定,在运行时确定,可输入可输入17pc=new charn; /申请申请17个字符(可装个字符(可装8个汉字和一个结束符)的内存空间个汉字和一个结束符)的内存空间strcpy(pc,堆内存的动态分配堆内存的动态分配);coutpcendl;delete pc;/释放释放pc

    33、所指向的所指向的n个字符的内存空间个字符的内存空间41结构定义格式:结构定义格式:struct struct 结构名结构名 类型类型1 1 结构成员结构成员1 1;类型类型2 2 结构成员结构成员2 2;; ;例如:例如:struct Teacherstruct Teacher long int id; long int id; char name10char name10;int age;int age;int sex;int sex; ; 结构定义后,可以声明结构定义后,可以声明结构变量结构变量或或指向结构的指针指向结构的指针如:如:Teacher ZhangTeacher Zhang;T

    34、eacher Teacher * *tp;tp;tp=new Teacher;tp=new Teacher;42类类 类是具有相同属性和行为的一组对象的集类是具有相同属性和行为的一组对象的集合合,它为属于该类的,它为属于该类的全部对象全部对象提供了提供了统一统一的抽象描述的抽象描述,其内部包括,其内部包括属性和行为属性和行为两个两个主要部分。主要部分。 利用类可以实现数据的利用类可以实现数据的封装、隐藏、继承封装、隐藏、继承与派生与派生。 利用类易于编写大型复杂程序,其模块化利用类易于编写大型复杂程序,其模块化程度比程度比C中采用函数更高。中采用函数更高。43 类的定义分为说明和实现两个部分。

    35、类的定义分为说明和实现两个部分。 类说明部分类说明部分是用来声明该类中的成员。类的是用来声明该类中的成员。类的成员包括数据成员和函数成员。其中,函数成员包括数据成员和函数成员。其中,函数成员又称成员函数或成员又称成员函数或“方法方法”,用于对数据,用于对数据成员进行各种操作。成员进行各种操作。 类实现部分类实现部分用来对成员函数进行定义。用来对成员函数进行定义。 即说明部分告诉类要即说明部分告诉类要“干什么干什么”,实现部分,实现部分告诉类告诉类“怎么干怎么干”。44类说明部分类说明部分类说明部分一般格式如下:类说明部分一般格式如下:class class 类名类名 private:priva

    36、te:( (或缺省时或缺省时) )数据成员声明或函数成员的原型;数据成员声明或函数成员的原型;protectedprotected:数据成员声明或函数成员的原型;数据成员声明或函数成员的原型;publicpublic:数据成员声明或函数成员的原型;数据成员声明或函数成员的原型; ;45类实现部分类实现部分 类的实现部分,包括所有在类体中说明的成员类的实现部分,包括所有在类体中说明的成员函数的定义。成员函数的定义通常在类定义体之外函数的定义。成员函数的定义通常在类定义体之外给出,其中每个成员函数定义格式为:给出,其中每个成员函数定义格式为:返回值类型返回值类型 类名:成员函数名(类名:成员函数名

    37、( ) / /函数体函数体 类的成员函数在类外部定义时,前面必须加上类的成员函数在类外部定义时,前面必须加上“类名:类名:”,以说明所定义的函数是哪一个类的,以说明所定义的函数是哪一个类的成员。成员。“:”称为称为作用域运算符作用域运算符。46 封装性来自对类成员的访问控制权限。封装性来自对类成员的访问控制权限。 在在C+C+中,类的成员从访问权限上分为中,类的成员从访问权限上分为私有(私有(p r i v a t ep r i v a t e ) 、 公 有 () 、 公 有 ( p u b l i cp u b l i c ) 和 保 护 () 和 保 护 (protectedprotec

    38、ted)三类)三类。 私有成员通常是一些数据成员。私有成员通常是一些数据成员。privateprivate权权限为类带来了封装性,它使私有成员隐藏起来,限为类带来了封装性,它使私有成员隐藏起来,不能从类的外部对它们进行访问,或者说它们从不能从类的外部对它们进行访问,或者说它们从类外部是不可见的,只有类自己的成员函数才可类外部是不可见的,只有类自己的成员函数才可以访问它们。以访问它们。 公有成员往往是一些操作(即成员函数),公有成员往往是一些操作(即成员函数),可在程序中类的外部访问它们,它们是类的对外可在程序中类的外部访问它们,它们是类的对外接口。接口。 类封装和数据隐藏类封装和数据隐藏47例

    39、:例: 点类点类Point的定义的定义class Pointprivate:double x , y ;public:void SetPoint(double x , double y) ;double GetX ( ) ;double GetY ( ) ;void Print ( ) ;;void Point : SetPoint (double a , double b) /定义成员函数定义成员函数SetPoint( ) x = a ; y = b; double Point : GetX ( ) /定义成员函数定义成员函数GetX ( ) return x ;double Point :

    40、 GetY ( ) /定义成员函数定义成员函数GetY ( ) return y ;void Point : Print( ) /定义成员函数定义成员函数Print( ) cout”X=” x ”,” “Y=” y endl ;类实现部分:类实现部分:类说明部分:类说明部分:48 定义类时说明部分中的关键字定义类时说明部分中的关键字publicpublic、privateprivate、protectedprotected从它们出现的位置起开始生效,直到出现从它们出现的位置起开始生效,直到出现另一个访问权限关键字为止。另一个访问权限关键字为止。 访问权限关键字可以按访问权限关键字可以按任意顺序

    41、出现任意次任意顺序出现任意次,但,但是,如果把所有的私有成员和公有成员归类放在一起是,如果把所有的私有成员和公有成员归类放在一起,能增强程序的可读性。,能增强程序的可读性。 如果把所有的私有成员放在公有成员前面,可以如果把所有的私有成员放在公有成员前面,可以自动获得自动获得缺省访问控制权限缺省访问控制权限privateprivate。49 类中的数据成员可以是任何数据类型。例类中的数据成员可以是任何数据类型。例如整型、浮点型、字符型、数组、指针和引用如整型、浮点型、字符型、数组、指针和引用等。等。 不能在类的说明部分给类的数据成员赋初值,不能在类的说明部分给类的数据成员赋初值,例如例如在点类的

    42、定义中,下面的定义是错的:在点类的定义中,下面的定义是错的:class Pointclass Point int x=0 , y=0;int x=0 , y=0;public:public: ;50对象的定义和成员表示对象的定义和成员表示 类描述了对象的数据存储和操作特性,对象是类类描述了对象的数据存储和操作特性,对象是类的实例。正像定义的实例。正像定义 int 类型的变量一样,创建类类型类型的变量一样,创建类类型 Point 的对象也被看作定义的对象也被看作定义Point 类型的变量。类型的变量。 对象在它的类确定了以后,定义格式为:对象在它的类确定了以后,定义格式为: 类名类名 例如,定义

    43、例如,定义(或者说创建或者说创建)两个点类两个点类Point 的对象:的对象: Point p1 , p2 (2.0 , 3.0) ; 中,可以是一般的对象名,也可以是中,可以是一般的对象名,也可以是指向对象的指针或对象的引用,还可以是对象数组名指向对象的指针或对象的引用,还可以是对象数组名。例如,一个复数类。例如,一个复数类Complex的对象可以如下定义:的对象可以如下定义: Complex c1,c2,*pc,c10; 51对象成员的表示方法对象成员的表示方法 一个一个对象的成员对象的成员就是该对象的类所定义的成员。对象成员就是该对象的类所定义的成员。对象成员有有数据成员和成员函数数据成

    44、员和成员函数。 一般对象的成员一般对象的成员表示如下:表示如下: . 或者或者 .() 前者用来表示数据成员,后者用来表示成员函数。这里的前者用来表示数据成员,后者用来表示成员函数。这里的“.”是一个运算符,该运算符的功能是表示对象的成员是一个运算符,该运算符的功能是表示对象的成员。 指向对象的指针的成员指向对象的指针的成员表示如下:表示如下: - 或者或者 -() 这里的这里的“-”是一个表示成员的运算符,它与是一个表示成员的运算符,它与 “.”运算符的运算符的区别是区别是“-”用来表示对象的指针的成员,而用来表示对象的指针的成员,而“.”用来表示一般用来表示一般对象的成员。同样,前者表示数

    45、据成员,而后者表示成员函数对象的成员。同样,前者表示数据成员,而后者表示成员函数。 52#include #include cdate.hvoid main() CDate date1, date2; date1.SetDate(1996,5,4); date2.SetDate(1998,4,9); int leap=date1.IsLeapYear(); coutleapendl; date1.Print(); date2.Print();例例 分析该程序的输出结果分析该程序的输出结果class CDate public: void SetDate(int y, int m, int d);

    46、 int IsLeapYear(); void Print(); private: int year, month, day;void CDate:SetDate(int y, int m, int d) year=y; month=m; day=d;int CDate:IsLeapYear() return (year%4=0&year%100!=0)|(year%400=0);void CDate:Print() coutyear.month.dayendl;53构造函数与析构函数构造函数与析构函数 构造函数和析构函数是在类体中说明的构造函数和析构函数是在类体中说明的两种特殊的两种特殊的成

    47、员函数成员函数。 构造函数的功能是在创建对象时,用给构造函数的功能是在创建对象时,用给定的对象对定的对象对对象进行初始化对象进行初始化。 析构函数的功能是用来析构函数的功能是用来释放一个对象释放一个对象,它与构造函数的功能正好相反。它与构造函数的功能正好相反。54构造函数的特点如下:构造函数的特点如下:(1) 构造函数是成员函数,函数体可写在类体内,构造函数是成员函数,函数体可写在类体内,也可写在类体外。也可写在类体外。(2) 构造函数是一个特殊的成员函数,该函数的构造函数是一个特殊的成员函数,该函数的名名字与类名相同字与类名相同,该函数不指定类型说明。该函,该函数不指定类型说明。该函数数可以

    48、没有参数,也可有参数可以没有参数,也可有参数。(3) 构造函数可以构造函数可以重载重载,即可定义多个参数个数不,即可定义多个参数个数不同的函数。同的函数。(4) 程序中一般不直接调用构造函数,在程序中一般不直接调用构造函数,在创建对象创建对象时系统自动调用构造函数时系统自动调用构造函数。55构造函数举例构造函数举例class Clockpublic:Clock (int NewH, int NewM, int NewS);/构造函数构造函数void SetTime(int NewH, int NewM, int NewS);void ShowTime();private:int Hour,Mi

    49、nute,Second;56构造函数的实现:构造函数的实现:Clock:Clock(int NewH, int NewM, int NewS)Hour= NewH;Minute= NewM;Second= NewS;建立对象时构造函数的作用:建立对象时构造函数的作用:void main() Clock c (0,0,0); /隐含调用构造函数,将初始值作为实参。隐含调用构造函数,将初始值作为实参。 c.ShowTime();3157析构函数析构函数 完成对象被删除前的一些清理工作。完成对象被删除前的一些清理工作。 在对象的生存期结束的时刻系统自动调在对象的生存期结束的时刻系统自动调用它,然后再

    50、释放此对象所属的空间。用它,然后再释放此对象所属的空间。 如果程序中未声明析构函数,编译器将如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。自动产生一个默认的析构函数。58构造函数和析构函数举例构造函数和析构函数举例#includeusing namespace std;class Point public: Point(int xx,int yy); Point(); /.其它函数原形其它函数原形 private: int X,int Y;59Point:Point(int xx,int yy) X=xx; Y=yy;Point:Point()/.其它函数的实现略其它函数的实现

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:北京大学软件学院模板课件.ppt
    链接地址:https://www.163wenku.com/p-2862997.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库