欢迎来到天天文库
浏览记录
ID:50320008
大小:109.50 KB
页数:15页
时间:2020-03-08
《C及C++程序设计 教学课件 作者 张富 第十六章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十六章类的工具16.1构造函数和析构函数16.2函数重载16.3运算符重载16.4对象的动态存储管理16.1构造函数和析构函数当我们建立了一个类并说明了这个类的对象后,对象的初始状态,即对象数据成员的值,是不确定的。构造函数属于类的成员函数。构造函数的函数名与类名同。它不需要函数类型说明,它也没有返回值。如果在类定义的成员函数中,没有说明构造函数,系统将提供一个构造函数。析构函数(destructor)是系统提供的另一个特殊成员函数,它的作用与构造函数相反,是消除一个对象,释放分配给对象的内存空间。析构函数的函数名是
2、在类名前加一个“~”号。16.1.1不带参数的构造函数不带参数的构造函数也称为缺省构造函数。如果程序中没有说明构造函数,编译程序将提供一个缺省构造函数,它不做任何操作,就如同说明了一个不带参数而且函数体为空的构造函数。如果需要缺省构造函数,必须用户自己定义。例如,我们定义了类counter,函数counter(void);便是类counter的缺省构造函数。调用构造函数的一般形式为:类名对象名;16.1.2析构函数一个对象进入其代码块时才建立,离开它的代码块时,就被撤消。在很多情况下,一个对象被撤消时,也要执行一些操作
3、,如释放它所占用的内存单元。析构函数就是用来自动(隐式地)作这项工作的。16.1.3带参数的构造函数通常在创立一个对象时,需要对它的各数据元素初始化,即给它们赋予特定的值。使用构造函数就可以在对象创立时对对象进行初始化。这样的初始化工作,是通过传递给构造函数的参数来实现的。通过调用带参数的构造函数进行对象初始化的一般形式为:类名对象名(初始化参数);16.1.4构造函数参数的缺省值构造函数的参数可以有缺省值。16.2函数重载下面将函数的重载问题分为一般函数重载,构造函数重载和成员函数重载三个方面来谈。16.2.1一般函
4、数的重载16.2.2构造函数重载构造函数是类的一个特殊的成员函数,但它也同样可以重载。这意味着,一个类可以定义若干个构造函数。当重载某个类的构造函数时,只需说明它可能采用的各种参数形式,定义出与这些参数形式相应的操作。16.2.3重载类成员函数与重载构造函数的情况一样,类的成员函数也可以进行重载。系统会根据函数参数类型的不同,选择相应的成员函数进行运算。16.2.4构造函数的动态初始化所谓构造函数的动态初始化,就是根据程序运行时获得的数据,创建适当的对象和进行适当的初始化。16.3运算符重载除了函数可以重载外,运算符也
5、能进行重载。操作符的重载是C++实现多态性的另一个手段。运算符的重载是使一些运算符对于某个类含有特定的意义,同时不影响运算符原来的基本含义。为了实现重载运算符,必须定义指定运算符在类中的具体操作的含义。因此,在类的成员函数中,必须定义一个叫做operator的运算符函数。此函数的一般形式为:typeclass_name::operator#(arg_list){//操作符定义}要求运算符函数必须定义为类的成员函数或友元函数。16.3.1成员运算符函数的重载例16.3.1设有类complex。为该类的复数的加法运算,定
6、义重载运算符“+”。复数加法运算与一般的加法运算不同。复数加法是实部与虚部分别进行加。因此,对运算符“+”,必须重新定义。根据重载运算符函数的一般形式,应当定义如下的重载运算符函数:complexoperator+(complexx){complextemp;temp.real=real+x.real;temp.imag=imag+x.imag;returntemp;}16.3.2友元运算符函数友元函数也可以作为运算符函数。由于友元函数没有隐含的参数this,因此,重载二元运算符时,两个操作数都必须显式地传递给函
7、数;重载一元函数时,不能省略唯一的操作数。16.4对象的动态存储管理在第十四章的14.3.10节中,对C++的动态存储管理已经作了介绍。这一节只对C++动态存储管理在类方面的应用,即对象的内存分配和释放作一简单说明。为对象申请内存和释放的一般格式为:obj_pointer=newclass_name(init_list);deleteobj_pointer;其中obj_pointer为用户定义的对象指针,class_name为用户定义的类名。(init_list)为对象的初始值,初始化部分是任选的。
此文档下载收益归作者所有