- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章构造函数和析构函数 10.1.1 构造函数的定义 10.1.2 默认构造函数 默认构造函数: 在定义类时,若没有定义类的构造函数,则编译器自动产生一个默认构造函数,该函数什么事也不做; 在定义类时,若定义了类的构造函数,则编译器就不产生默认构造函数; 在类中,若定义了没有参数的构造函数,或各参数均有缺省值的构造函数也称为默认构造函数,默认构造函数只能有一个; 产生对象时,系统必定要调用构造函数,所以任一对象的构造函数必须唯一。 10.2 析构函数 析构函数: 在一个对象消亡时被调用,因此常用来做善后工作,比如对象保持的动态空间的释放等。 类变量消亡:在变量退出其作用域时 全局:程序结束 局部:退出定义的分程序 通过new得到的对象,用delete运算时。 10.2 析构函数 析构函数的一些问题: 析构函数名字必须与类名相同,并在其前面加字符“~”; 不能指定函数返回值,也不能指定为void类型; 不可带参数; 不允许重载; 用delete运算释放一个对象会调用析构函数; 在类变量消亡时,总要调用一个析构函数。 10.3.1 拷贝构造函数 格式: ClassName::ClassName(ClassName ) 作用:一般用于完成类变量间的拷贝。 隐含拷贝构造函数:对没有定义构造函数的类,系统隐含有一个默认拷贝构造函数,功能是完成拷贝。 10.3.1 拷贝构造函数 调用拷贝构造函数的情况: 用说明语句来创建一个对象时,用一个已有对象来初始化新建对象; 调用函数时,用传值调用方式,把对象作为实参传递给形参; 函数中返回一个对象。 10.3.2 赋值操作函数 当同类对象之间执行赋值操作时,调用赋值操作函数。 赋值操作函数的一般格式: 类名类名::operator=(const 类名对象名) { … //赋值操作函数体 return *this; } 若类中没有显式定义赋值操作函数,编译器自动生成一个公有的赋值操作函数,复制每个非静态数据成员。 10.3.3 单参构造函数 10.4 复合函数与成员对象 在定义一个新类时,可把一个已定义类的对象作为该类的成员。产生这新定义类的对象时,也要对它的对象成员进行初始化,且只能通过这新类的构造函数来对它的所有数据成员初始化。要对对象成员进行初始化,必须通过调用其对象成员的构造函数来实现。 10.4复合函数与成员对象 新类构造函数形式为: 类名::类名(参数表):c1(参数表),…,cn(参数表) { 函数体; } 注意: c1 ..cn的次序可任意,但习惯上按说明次序定义。 当类自己不需要构造函数而其对象成员需构造初始化,则自己必须有一个构造函数,不能依赖于缺省的构造函数。 10.4复合函数与成员对象 三维坐标中的一条直线的可通过该直线的两个端点的坐标(x1,y1,z1)和(x2,y2,z2)来描述。定义一个类,实现坐标数据的初始化,输出端点的坐标和直线的长度。 10.5 对象数组 对象数组就是一类对象的一个有序集合,数组中所有元素是同一类的对象。 一维对象数组的定义: 类型数组名[常量表达式][={初始化列表}]; 例: Point points[3]={Point(1,2),Point(3,4)}; 10.5 对象数组 对象数组可以作为一个类的数据成员。 注意: 该类的构造函数中不能对各个数据元素进行显式初始化。 数组元素的类应提供默认构造函数。 10.7.1 修饰符const const成员函数 返回类型函数名(形参表)const{…} const成员函数体中不能改变当前对象的数据成员,只能调用const成员函数。 const对象 const 类名 对象名或对象指针或对象引用 常量对象 const形参 函数体中不会改变const形参的数据成员的值。 const返回值 函数的返回值不可改变,即调用方不能通过返回的指针或引用来改变返回对象的状态。 10.8 指针成员 在一个类中,指针可作为该类的数据成员,可以是单个指针,也可是指针数组。 若一个类中有指针成员,通常默认拷贝构造函数、赋值操作函数、析构函数需要显式定义,以避免运行错误。 * * #include iostream.h class Complex{ double Real,Imag; public: void SetCom(double a,double b) { Real=a; Imag=b;} }; void main() { Complex a,b; a.SetCom(1.0,2.0); b.SetCom(2.0,3.0); } 构造函数: 在说明(产生)一个对象时自动被调用,所
文档评论(0)