资源描述:
《类的深入剖析(II).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、类的深入剖析(第II部分)提纲const对象、const成员函数和const数据成员组成friened(友元)函数和friend(友元)类This指针Static成员变量和成员函数数据抽象和信息隐藏代理类const对象定义对象时用const进行修饰,称为常对象,它的数据成员值在对象的整个生存期间内不能被改变。也就是说,常对象在定义时必须进行初始化,而且不能被更新。使用常量,既实现了数据共享、又可以保证数据不会被改变。常对象定义一般形式:const类名对象名([参数列表]);或者:类名const对象名([
2、参数列表]);const成员函数对于类的某个成员函数,使用const关键字修饰,称为常成员函数。常对象只能调用常成员函数,保证常对象的数据成员不能被修改。例如:intTime::getHour()const{…}const成员函数常成员函数的特点:const是函数类型的一个组成部分,在函数实现时也要带const关键字。常成员函数不能更新对象的数据成员,也不能调用该类中的非常成员函数。常对象只能调用常成员函数,但是常成员函数也可以被普通对象来调用。const成员函数const关键字可以被用于参与对重载函数
3、的区分。const成员函数进行非const版本的重载。编译器可以根据情况选择相应的重载函数。如果对象是const,使用const版本的重载函数,如果是非const,使用非const版本的重载函数。const成员函数构造函数和析构函数不进行const声明。必须允许构造函数修改对象,这样对象才能适当的初始化。析构函数必须能够在对象使用的内存被系统回收之前进行扫尾工作。P394const数据成员使用const说明的数据成员称为常数据成员。如果在一个类中说明了常数据成员,那么任何函数中都不能对该成员赋值。不能采
4、用在构造函数中对常数据成员赋初值的方法,就只能通过初始化器初始化。例如:constinthour;constintsecond;intminute;Time::Time(inth,ints,intm):hour(h),second(s){minute=m;}或者Time::Time(inth,ints,intm):hour(h),second(s),minute(m){}错误:Time::Time(inth,ints,intm){minute=m;hour=h;second=s;}类的组合类的组合(也称
5、类的聚集),描述的就是一个类内嵌其它类的对象作为数据成员的情况,它们之间的关系是一种包含与被包含的关系。在面向对象程序设计中,可以对复杂对象进行分解、抽象,把一个复杂对象分解为简单对象的组合。11含对象成员的类的定义classDate{//日期类proteced:intyear,month,day;public:Date(…);//构造};classTime{//时间类proteced:inthour,minute,second;public:Time(…);//构造};classClock{//带日历
6、的钟//有两个对象成员protected:Datedd;Timett;public:Clock(…)://构造……;};类的组合类的组合当创建组合类的对象时,各个内嵌对象也将被自动创建。因此,在创建组合类对象时既要对本类的基本数据成员进行初始化,又要对内嵌对象成员进行初始化。在声明一个组合类的对象时,不仅它自身的构造函数将被调用,而且还将调用其内嵌对象的构造函数。类的组合组合类构造函数定义的一般形式为:类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表),…{//类的初始化}其中,“内嵌对
7、象1(形参表),内嵌对象2(形参表),…”为初始化列表,用来完成对内嵌对象的初始化。类的组合组合类的构造函数的执行顺序是:(1)(如果有多个内嵌对象)按照内嵌对象在组合类的声明中出现的次序,依次调用其内嵌对象的构造函数。(注意:并不是按照初始化列表中给出的顺序)。(2)再执行本类的构造函数的函数体。注意:内嵌对象调用的如果是被隐式定义的拷贝构造函数,则不包含任何被其调用时要显示的输出语句。P401-P402友元(friend)函数和友元(friend)类在一个类中,可以利用关键字friend将别的模块(
8、一般函数、其它类的成员函数或其它类)声明为本类的友元,这样类中本来隐藏的信息(私有和保护成员)就可以被友元访问。友元提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。友元并不是类的成员。1、在类体内说明,在函数的类型说明符前加关键字friend;2、在类体外定义,定义格式与普通函数相同;3、友元函数是非成员函数,在调用上与普通函数相同;4、友元函数可以直接访问该类中的私有成员。友元(friend)函数友元函数定