汇编语言1-31_第1页
汇编语言1-31_第2页
汇编语言1-31_第3页
汇编语言1-31_第4页
汇编语言1-31_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、高级语言程序设计-2谭火彬谭火彬C+第三章 类:深入剖析(II)北京航空航天大学软件学院北京航空航天大学软件学院thbin内容安排内容安排y常量常量y组成:对象作为类的成员组成:对象作为类的成员y友元函数和友元类友元函数和友元类ythis指针和动态内存分配指针和动态内存分配y静态类成员静态类成员北京航空航天大学软件学院北京航空航天大学软件学院thbin内容安排内容安排y组成:对象作为类的成员组成:对象作为类的成员y友元函数和友元类友元函数和友元类ythis指针和动态内存分配指针和动态内存分配y静态类成员静态类成员北京航空航天大学软件学院北京航空航天大学软件学院thbin常量常量yconst类型

2、修饰符:常量说明符类型修饰符:常量说明符是是constant的缩写,的缩写, “恒定不变恒定不变”的意的意思,被其修饰的东西都受到强制保护,思,被其修饰的东西都受到强制保护,可以预防意外的变动,提高程序健壮性可以预防意外的变动,提高程序健壮性 在变量说明语句中,在变量说明语句中,const 用于用于在用在用const 声明变量时,声明变量时, 必须对该变量必须对该变量进行初始化进行初始化很多很多C+程序设计书籍建议:程序设计书籍建议:“”北京航空航天大学软件学院北京航空航天大学软件学院thbinconst关键字主要使用场合关键字主要使用场合y1. 修饰一个简单的变量修饰一个简单的变量y2. 修

3、饰函数的输入参数修饰函数的输入参数y3. 修饰函数的返回值修饰函数的返回值y4. 修饰类的成员函数修饰类的成员函数北京航空航天大学软件学院北京航空航天大学软件学院thbin1. 修饰一个简单的变量修饰一个简单的变量北京航空航天大学软件学院北京航空航天大学软件学院thbinconst_cast转换常量性转换常量性北京航空航天大学软件学院北京航空航天大学软件学院thbin2. 修饰函数的输入参数修饰函数的输入参数yconst修饰输入参数,不能修饰输出参数:修饰输入参数,不能修饰输出参数:输入参数采用输入参数采用,那么加,那么加const修修饰可以防止意外地改动该指针,起到保护作饰可以防止意外地改动

4、该指针,起到保护作用用输入参数采用输入参数采用,由于函数将自动,由于函数将自动产生临时变量用于复制该参数,该输入参数产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加本来就无需保护,所以不要加const修饰修饰对于非内部数据类型的输入参数,应该将对于非内部数据类型的输入参数,应该将“值传递值传递”的方式改为的方式改为,目的是提高效率。例如将目的是提高效率。例如将void Func(T a) 改为改为void Func(const T &a) ,如类的拷贝构造函,如类的拷贝构造函数数 void strcpy(char *strDestination, char *strSource

5、);其中其中strSource是输入参数,是输入参数,strDestination是输出参数。给是输出参数。给strSource加上加上const修饰后,如果函数体内的语句试图改动修饰后,如果函数体内的语句试图改动strSource的内容,编译器将指出错误的内容,编译器将指出错误北京航空航天大学软件学院北京航空航天大学软件学院thbin3. 修饰函数的返回值修饰函数的返回值y如果给以如果给以方式的函数返回值方式的函数返回值加加const修饰,那么函数返回值(即指针)修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给的内容不能被修改,该返回值只能被赋给加加const修饰的同类型指

6、针修饰的同类型指针y如果函数返回值采用如果函数返回值采用,由,由于函数会把返回值复制到外部临时的存储于函数会把返回值复制到外部临时的存储单元中,加单元中,加const修饰没有任何价值修饰没有任何价值y函数返回值采用函数返回值采用的场合并不的场合并不多,这种方式一般只出现在类的赋值函数多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达中,目的是为了实现链式表达 ;如果将;如果将赋值函数的返回值加赋值函数的返回值加const修饰,那么该修饰,那么该返回值的内容不允许被改动返回值的内容不允许被改动函数:函数:const char * GetString(void);如下语句将出现编译错误

7、:如下语句将出现编译错误:char *str = GetString();正确的用法是:正确的用法是:北京航空航天大学软件学院北京航空航天大学软件学院thbin4. 修饰类的成员函数修饰类的成员函数y任何任何的成员函数都的成员函数都应该声明为应该声明为const类型类型const关键字放在成员函数定义的最后关键字放在成员函数定义的最后如果在编写如果在编写const成员函数时,不慎修成员函数时,不慎修改了数据成员,或者调用了其它非改了数据成员,或者调用了其它非const成员函数,编译器将指出错误成员函数,编译器将指出错误北京航空航天大学软件学院北京航空航天大学软件学院thbin为时间类添加为时间

8、类添加const约束约束 void Time:printUniversal() const cout setfill(0)setw(2)hour : setw(2)minute:setw(2)a.xa.z; couta.x a.zendl; 北京航空航天大学软件学院北京航空航天大学软件学院thbin友元成员友元成员y友元成员友元成员是其他某个类的成员函数,是当前类的友是其他某个类的成员函数,是当前类的友元元y说明:说明:1.友元成员的声明,除了前面冠以友元成员的声明,除了前面冠以“friend”外,还要注明所属类的类名外,还要注明所属类的类名2.友元成员应该在自己所属类的定义体中友元成员应该在

9、自己所属类的定义体中进行成员函数声明(或定义)进行成员函数声明(或定义)北京航空航天大学软件学院北京航空航天大学软件学院thbin友元类友元类y友元类友元类是一个类,而且是另一个类的友元是一个类,而且是另一个类的友元y说明:说明:类类A和和B,B被声明为被声明为A的友元类,则的友元类,则B类的所有成员函数都可以访问类的所有成员函数都可以访问A类的私类的私有成员有成员北京航空航天大学软件学院北京航空航天大学软件学院thbin友元类范例友元类范例北京航空航天大学软件学院北京航空航天大学软件学院thbin友元关系一些注意问题友元关系一些注意问题y友元关系是友元关系是“给予给予”,而不是,而不是“索取

10、索取”的的y友元关系既不对称也不能传递友元关系既不对称也不能传递y尽管类定义中有友元函数的原型,但友元尽管类定义中有友元函数的原型,但友元函数然仍不是成员函数函数然仍不是成员函数yprivate、protected和和public的成员访问符的成员访问符号与友元关系的声明无关号与友元关系的声明无关因此友元关系声明可以放在类定义中任何地因此友元关系声明可以放在类定义中任何地方方习惯:将类中所有友元关系的声明放在类定习惯:将类中所有友元关系的声明放在类定义最前面,并不加任何成员访问说明符义最前面,并不加任何成员访问说明符北京航空航天大学软件学院北京航空航天大学软件学院thbin内容安排内容安排y常

11、量常量y组成:对象作为类的成员组成:对象作为类的成员y友元函数和友元类友元函数和友元类y静态类成员静态类成员北京航空航天大学软件学院北京航空航天大学软件学院thbin使用使用this指针指针yC+为每个类提供一个为每个类提供一个this指针指针指向指向通过通过this指针可以访问当前对象的成员指针可以访问当前对象的成员y说明说明在非静态成员函数中使用在非静态成员函数中使用this指针指针友元函数不是成员函数,没有友元函数不是成员函数,没有this指针指针注意友元成员函数中的注意友元成员函数中的this指针所指向指针所指向的对象的对象北京航空航天大学软件学院北京航空航天大学软件学院thbinth

12、is指针的用法指针的用法/p408, Fig 10.17class Test public: Test( int = 0 ); void print() const;private: int x;Test:Test( int value ) : x(value) void Test:print() const cout x = x; cout x = x; cout n(*this).x = (*this).x = 0 & h = 0 & m 、.*、-*)可直接通过类名访问可直接通过类名访问(:)类名类名:静态成员静态成员可以没有声明类的任何对象时就使用静可以没有声明类的任何对象时就使用静态

13、类成员态类成员北京航空航天大学软件学院北京航空航天大学软件学院thbin使用静态数据成员使用静态数据成员void main() A:view(); A a1,a2; A:view(); a2.view();/执行结果:执行结果: A:x=900 a.x=901 a.x=902 A:x=902 A:x=902北京航空航天大学软件学院北京航空航天大学软件学院thbin使用静态类成员使用静态类成员yP415, Fig 10.21Fig 10.23利用静态类成员统计类对象的个数利用静态类成员统计类对象的个数(统统计员工的个数计员工的个数)class Employee public: Employee(

14、const char* const, const char* const); Employee(); static int getCount(); private: static int count; / 统计类对象的数量统计类对象的数量;北京航空航天大学软件学院北京航空航天大学软件学院thbin使用静态类成员使用静态类成员int Employee:count = 0; /初始个数为初始个数为0Employee:Employee() firstName = new char strlen( first ) + 1 ; strcpy( firstName, first ); lastName =

15、 new char strlen( last ) + 1 ; strcpy( lastName, last ); count+; / 对象个数对象个数+1 Employee:Employee() delete firstName; delete lastName; count-; /对象个数对象个数-1北京航空航天大学软件学院北京航空航天大学软件学院thbin上机实验上机实验2实验内容实验内容y参考参考Fig10.1210.13、Fig10.2110.22,实现学生类实现学生类CStudent;具体要求如下:;具体要求如下:数据成员:姓名数据成员:姓名name,必须使用,必须使用char*类型

16、(不能使类型(不能使用用char,或或string类型),在构造和析构函数中实现类型),在构造和析构函数中实现动态内存分配动态内存分配组成数据成员:出生日期组成数据成员:出生日期birthDate,使用实验,使用实验1所完所完成的成的CDate类型类型静态数据成员:学生数量静态数据成员:学生数量count,用于统计在程序中,用于统计在程序中产生学生对象的个数产生学生对象的个数提供构造函数、拷贝构造函数和析构函数提供构造函数、拷贝构造函数和析构函数提供必要的提供必要的get和和set函数,存取私有数据成员函数,存取私有数据成员编写编写main函数,测试所要求的功能函数,测试所要求的功能按标准按标准C+语法编写程序语法编写程序北京航空航天大学软件学院北京航空航天大学软件学院thbin作业提交方式作业提交方式y1. 准备准备本机新建一目录,以自己的学号、命名、作业次数,本机新建一目录,以自己的学号、命名、作业次数,如:如:“10211001张三张三2”将本次作业所完成的将本次作业所完成的5个源代码文件放在该目录下个源代码文件放在该目录下(日日期类和学生类的期类和学生类的2个个.h和和3个个cpp),打包压缩为一个

温馨提示

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

评论

0/150

提交评论