- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C大学基础教程第八
* * * * * * * -*- 与构造函数相反,当对象生存期结束时,需要调用析构函数,释放对象所占的内存空间。 与构造函数一样,析构函数也是类的一个公有成员函数,它的名称是在类名前加“~”构成,没有返回值,和构造函数不同的是析构函数不接受任何参数。 析构函数是在对象生存期即将结束的时刻由系统自动调用的。如果程序员没有定义析构函数,系统将自动生成和调用一个默认析构函数。 类的析构函数不能重载。 8.4 析构函数 8.5 拷贝构造函数 -*- 拷贝构造函数就是函数的形参是类的对象的引用的构造函数。 通过等于号复制对象时,系统会自动调用拷贝构造函数。 如果程序在类定义时没有显式定义拷贝构造函数,系统也会自动生成一个默认的拷贝构造函数,把成员值一一复制。 拷贝构造函数与原来的构造函数实现了函数的重载。 8.5 拷贝构造函数 -*- 完成简单的一一对应的复制的拷贝构造函数称为浅拷贝。 如果类的数据成员包括指针变量,类的构造函数用new运算符为这个指针动态申请空间。如果通过浅拷贝进行了对象的复制。最后,在退出运行时,程序会报错。这时需要用“深拷贝”的方式恰当定义类的拷贝构造函数。 一般来讲,如果一个类需要析构函数来释放资源,则它也需要定义一个显式拷贝构造函数来实现深拷贝。 浅拷贝与深拷贝 -*- 以下三种情况系统会自动调用拷贝构造函数: 当用类的一个对象去初始化该类的另一个对象时 如果函数的形参是类的对象,调用函数时,进行形参和实参结合时 如果函数的返回值是类的对象,函数执行完成返回调用者时 8.5 拷贝构造函数 8.6 类的静态成员 -*- 1、静态数据成员 静态数据成员是类的数据成员的一种特例,采用static关键字来声明。 类的数据成员在类的每一个对象中分别存储不同的数值,但是静态数据成员则不同,它在整个类中只有一个拷贝,由该类的所有对象共同维护和使用,从而实现了同一类的不同对象之间的数据共享。 静态数据成员具有静态生存期。 在类的声明中只能声明静态数据成员的存在。由于类的声明是抽象的,静态数据成员的初始化需要在类的外部进行,通过类名对它进行访问。 -*- 2、静态成员函数 可以通过定义和使用静态成员函数来访问静态数据成员。 所谓静态成员函数就是使用static关键字声明函数成员。同静态数据成员一样,静态成员函数也属整个类,由同一个类的所有对象共同维护,为这些对象所共享。 -*- 2、静态成员函数 静态成员函数作为成员函数,它的访问属性可以受到类的严格控制。对公有静态成员函数,可以通过类名或对象名来调用;而一般的非静态公有成员函数只能通过对象名来调用。 静态成员函数可以直接访问该类的静态数据成员和函数成员;而访问非静态数据成员,必须通过参数传递方式得到对象名,然后通过对象名来访问。 8.7 类成员的保护和使用 -*- 1、类的封装 在程序设计中,将数据与操作数据的行为进行有机地结合,这就是封装。 C++语言提供类这种语言成分来实现封装,类是属性和操作的结合体,并且在定义类的属性和操作时,规定了它们的可见性。 通过封装将一部分成员作为类与外部的接口,而将其它的成员隐藏起来,以防外界的干扰和误操作,使程序的不同模块之间的相互影响减小到最低限度。 -*- 2、友元 在一个类中,可以利用关键字friend将别的模块(一般函数、其它类的成员函数或其它类)声明为本类的友元,这样类中本来隐藏的信息(私有和保护成员)就可以被友元访问。 友元提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。 友元并不是类的成员。 -*- 2、友元 关于友元类,要注意: 友元关系是不能传递的。B类是A类的友元,C类是B类的友元,C类和A类之间,如果没有声明,就没有任何友元关系,不能进行数据共享。 友元关系是单向的。如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有和保护数据。 -*- 3、常对象和常成员 定义对象时用const进行修饰,称为常对象,它的数据成员值在对象的整个生存期间内不能被改变。也就是说,常对象在定义时必须进行初始化,而且不能被更新。 使用常量,既实现了数据共享、又可以保证数据不会被改变。 -*- 3、常对象和常成员 对于类的某个成员函数,使用const关键字修饰,称为常成员函数。常对象只能调用常成员函数,保证常对象的数据成员不能被修改。 使用const说明的数据成员称为常数据成员。如果在一个类中说明了常数据成员,那么任何函数中都不能对该成员赋值。构造函数对该数据成员进行初始化,就只能通过初始化列表。 -*- 3、常对象和常成员 常成员函数的特点: const是函数类型的一个组成
文档评论(0)