预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

一、类对象数组类的对象和C++其他数据类型一样,也可以为其建立数组,数组的表示方法和结构一样。#includeiostream.hclassDate{intmo,da,yr;public:Date(intm=0,intd=0,inty=0){mo=m;da=d;yr=y;}voiddisplay()const{cout<<mo<<''<<da<<'=""'<<yr<};intmain(){Datedates[2];Datetoday(12,31,2003);dates[0]=today;dates[0].display();dates[1].display();return0;}1.类对象数组和默认构造函数在前面已经说过,不带参数或者所有参数都有默认值的构造函数叫做默认构造函数。如果类中没有构造函数,编译器会自动提供一个什么都不做的公共默认构造函数。如果类当中至少有一个构造函数,编译器就不会提供默认构造函数。如果类当中不含默认构造函数,则无法实例化其对象数组。因为实例花类对象数组的格式不允许用初始化值来匹配某个构造函数的参数表。上面的程序中,main()函数声明了一个长度为2的Date对象数组,还有一个包含初始化值的单个Date对象。接着把这个初始化的Date对象赋值给数组中第一个对象,然后显示两个数组元素中包含的日期。从输出中可以看到,第一个日期是有效日期,而第二个显示的都是0。当声明了某个类的对象数组时,编译器会为每个元素都调用默认构造函数。下面的程序去掉了构造函数的默认参数值,并且增加了一个默认构造函数。#includeclassDate{intmo,da,yr;public:Date();Date(intm,intd,inty){mo=m;da=d;yr=y;}voiddisplay()const{cout<<mo<<''<<da<<'=""'<<yr<};Date::Date(){cout<<<endl;mo=0;da=0;yr=0;}intmain(){Datedates[2];Datetoday(12,31,2003);dates[0]=today;dates[0].display();dates[1].display();return0;}运行程序,输出为:DateconstructorrunningDateconstructorrunning12/31/20030/0/0从输出中可以看出,Date()这个默认构造函数被调用了两次。2.类对象数组和析构函数当类对象离开作用域时,编译器会为每个对象数组元素调用析构函数。#includeiostream.hclassDate{intmo,da,yr;public:Date(intm=0,intd=0,inty=0){mo=m;da=d;yr=y;}~Date(){cout<<<endl;}voiddisplay()const{cout<<mo<<''<<da<<'=""'<<yr<};intmain(){Datedates[2];Datetoday(12,31,2003);dates[0]=today;dates[0].display();dates[1].display();return0;}运行程序,输出为:12/31/20030/0/0DatedestructorrunningDatedestructorrunningDatedestructorrunning表明析构函数被调用了三次,也就是dates[0],dates[1],today这三个对象离开作用域时调用的。二、静态成员可以把类的成员声明为静态的。静态成员只能存在唯一的实例。所有的成员函数都可以访问这个静态成员。即使没有声明类的任何实例,静态成员也已经是存在的。不过类当中声明静态成员时并不能自动定义这个变量,必须在类定义之外来定义该成员。1.静态数据成员静态数据成员相当于一个全局变量,类的所有实例都可以使用它。成员函数能访问并且修改这个值。如果这个静态成员是公有的,那么类的作用域之内的所有代码(不论是在类的内部还是外部)都可以访问这个成员。下面的程序通过静态数据成员来记录链表首项和末项的地址。#includeiostream.h#includestring.hclassListEntry{public:staticListEntry*firstentry;private:staticListEntry*lastentry;char*listvalue;ListEntry*nextentry;public:ListEntry(char*);~ListEntry(){delete[]listvalue;}ListEntry*NextEntry()const{returnnextentry;};voiddis