一、带参数的构造函数
构造函数名(类型 1 形参1,类型2 形参2,…)
前面已说明: 用户是不能调用构造函数的,因此无法采用常规的调用函数的方法给出实参。实参是在定义对象时给出的。定义对象的一般格式为
类名 对象名(实参1,实参2,…);
#include <iostream>
using namespace std;
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(25,20,12);
cout<<″The volume of box1 is ″<<box1.volume( )<<endl;
Box box2(20,14,10);
cout<<″The volume of box2 is ″<<box2.volume( )<<endl;
return 0;
}
二、参数初始化表
Box∷Box(int h,int w,int len):height(h),width(w),length(len){ }
定义时:Box box1; 调用无参构造函数
Box box2(10,20,30); 调用有参函数
class Box
{public:
Box( );
Box(int h,int w,int len):height(h),width(w),length(len){ }
int volume( );
private:
int height;
int width;
int length;
};
三、构造函数的重载
Box∷Box(int h);
Box∷Box(int h,int w);
在建立对象时分别给定1个参数和2个参数。
说明:
(1) 调用构造函数时不必给出实参的构造函数,称为默认构造函数(default constructor)。显然,无参的构造函数属于默认构造函数。一个类只能有一个默认构造函数。
(2) 如果在建立对象时选用的是无参构造函数,应注意正确书写定义对象的语句。
(3) 尽管在一个类中可以包含多个构造函数,但是对于每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都被执行。
三、析构函数
②static局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用static局部对象的析构函数。③如果定义了一个全局对象,则在程序的流程离开其作用域时(如main函数结束或调用exit函数) 时,调用该全局对象的析构函数。④如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。
析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。程序设计者事先设计好析构函数,以完成所需的功能,只要对象的生命期结束,程序就自动执行析构函数来完成这些工作。
四、对象数组
如果构造函数有3个参数,分别代表学号、年龄、成绩。则可以这样定义对象数组:
Student Stud[3]={ //定义对象数组
Student(1001,18,87), //调用第1个元素的构造函数, 为它提供3个实参
Student(1002,13,76), //调用第2个元素的构造函数, 为它提供3个实参
Student(1003,18,72) //调用第3个元素的构造函数,
为它提供3个实参
};
在建立对象数组时,分别调用构造函数,对每个元素初始化。每一个元素的实参分别用括号包起来,对应构造函数的一组形参,不会混淆。
#include <iostream>
using namespace std;
class Box
{public:
Box(int h=10,int w=12,int len=15): height(h),width(w),length(len){ }
int volume( );
private:
int height;
int width;
int length;
};
int Box∷volume( )
{return(height*width*length);
}
int main( )
{ Box a[3]={ //定义对象数组
Box(10,12,15), //调用构造函数Box,提供第1个元素的实参
Box(15,18,20), //调用构造函数Box,提供第2个元素的实参
Box(16,20,26) //调用构造函数Box,提供第3个元素的实参
};
五、对象指针
Time *pt; //定义pt为指向Time类对象的指针变量
Time t1; //定义t1为Time类对象
pt=&t1; //将t1的起始地址赋给pt
这样,pt就是指向Time类对象的指针变量,它指向对象t1。
定义指向类对象的指针变量的一般形式为
类名 *对象指针名;