第9章 怎样使用类和对象

上传人:豆浆 文档编号:47588457 上传时间:2018-07-03 格式:PPTX 页数:44 大小:185.08KB
返回 下载 相关 举报
第9章 怎样使用类和对象_第1页
第1页 / 共44页
第9章 怎样使用类和对象_第2页
第2页 / 共44页
第9章 怎样使用类和对象_第3页
第3页 / 共44页
第9章 怎样使用类和对象_第4页
第4页 / 共44页
第9章 怎样使用类和对象_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《第9章 怎样使用类和对象》由会员分享,可在线阅读,更多相关《第9章 怎样使用类和对象(44页珍藏版)》请在金锄头文库上搜索。

1、第9章 怎样使用类和对象9.1 9.1 利用构造函数对类进行初始化利用构造函数对类进行初始化 9.2 9.2 析构函数析构函数 9.3 9.3 调用构造函数和析构函数的顺序调用构造函数和析构函数的顺序 9.4 9.4 对象数组对象数组 9.5 9.5 对象指针对象指针 9.6 9.6 共享数据的保护共享数据的保护 9.7 9.7 对象的动态建立和释放对象的动态建立和释放 9.8 9.8 对象的赋值和复制对象的赋值和复制 9.9 9.9 静态成员静态成员 9.10 9.10 友元友元 9.11 9.11 类模板类模板9.1 构造函数 9.1.1 对象的初始化l在建立一个对象时,常常需要作某些初始

2、化的工作。 如果一个数据成员未被赋值,则它的值是不可预知的 ,因为在系统为它分配内存时,保留了这些存储单元 的原状,这就成为了这些数据成员的初始值。l这种状况显然是与人们的要求不相符的,对象是一个 实体,它反映了客观事物的属性(例如时钟的时、分、 秒的值),是应该有确定的值的。l注意: 类的数据成员是不能在声明类时初始化的。如果一个类中所有的成员都是公用的,则可以 在定义对象时对数据成员进行初始化。 class Time public : /声明为公用成员hour;minute;second; ; Time t1=14,56,30; /将t1初始化为14:56:30和结构体变量的初始化是相似的

3、 若数据成员为private或protected,不能用这种方法。在第8章的例子中,是用成员函数来对对象中的数据成员赋初值的(例如例8.3中的set_time函数,用户在主函数中调用set_time函数来为数据成员赋值)。如果对一个类定义了多个对象,而且类中的数据成员比较多,那么,程序就显得非常臃肿烦琐。9.1.2 构造函数的作用为了解决这个问题,C+提供了构造函数 (constructor)来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数 不同,不需要用户来调用它,而是在建立对象时自动 执行。 构造函数的名字必须与类名同名,而不能由用户任意 命名,以便编译系统能识别它并把它作

4、为构造函数处 理。它不具有任何类型,不返回任何值。 构造函数的功能是由用户定义的,用户根据初始化 的要求设计函数体和函数参数。例9.1 在例8.3基础上定义构造成员函数。 class Time public :Time( )hour=0;minute=0;second=0;void set_time(int h,int m,int s );void show_time( );private :int hour;int minute;int second; ;void Timeset_time(int h, int m,int s ) hour=h;minute=m;second=s; void

5、 Time:show_time( ) couthourminutesecond;t1.set_time(hour,minute,second);t1.show_time( );Time t2;t2.show_time( ); return 0; 运行结果: 10 25 54 10:25:540:0:0也可以只在类内对构造函数进行声明而在类外 定义构造函数。 class Time public :Time( );void set_time(int h,int m,int s );void show_time( );private :int hour;int minute;int second;

6、;在类外定义构造函数: Time:Time( ) hour=0;minute=0;second=0; 有关构造函数的使用说明: (1)在建立类对象时会自动调用构造函数。 (2)构造函数没有返回值,因此也不需要在定义构造函 数时声明类型,这是它和一般函数的一个重要的不 同之点。 (3)构造函数不需用户调用,也不能被用户调用。 (4)可以用一个对象初始化另一个对象。Time t1;Time t2=t1;(5)在构造函数的函数体中不仅可以对数据成员赋初 值,而且可以包含其他语句。但是一般不提倡在 构造函数中加入与初始化无关的内容,以保持程 序的清晰。(6)如果用户自己没有定义构造函数,则C+系统会

7、自动生成一个构造函数,只是这个构造函数的函 数体是空的,也没有参数,不执行初始化操作。9.1.3 带参数的构造函数在例9.1中构造函数不带参数,在函数体中对数据成员赋初值。这种方式使该类的每一个对象都得 到同一组初值。但是有时用户希望对不同的对象 赋予不同的初值。可以采用带参数的构造函数,在调用不同对象的构 造函数时,从外面将不同的数据传递给构造函数 ,以实现不同的初始化。l构造函数首部的一般格式为:构造函数名(类型 1 形参1,类型2 形参2,)用户是不能调用构造函数的,因此无法采用常规的调用函数的方法给出实参。l实参是在定义对象时给出的。定义对象的一般格式为 类名 对象名(实参1,实参2,

8、); 例9.2 有两个长方柱,其长、宽、高分别为:(1)12,20,25;(2)10,14,20。求它们的体积。 编一个基于对象的程序,在类中用带参数的构造函数。 class Box public :Box(int,int,int);int volume( );private :int height;int width;int length; Box:Box(int h,int w,int len) /在类外定义带参数的构造函数 height=h; width=w; length=len; int Box:volume( ) /定义计算体积的函数 return (height*width*length); int main( ) Box box1(12,25,30); cout #include using namespace std; class Student /声明Student类 public : Student(int n, string nam, char s ) /定义构造函数 num=n;name=nam;sex=s;coutshow_time ( );与 t1.show_time (); 等价Time *pt; /定义pt为指向Time类对象的指针变量Time t1; /定义t1为Time类对象pt= /将t1的起始地址赋给pt

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号