类——C++的灵魂(三)

三、构造函数和析构函数

C++中的类是一种数据类型,为了使用户自定义的类和一般数据类型的使用一样,需要建立一种方法,使对象在被创建时进行初始化,在使用结束时进行撤销。构造函数和析构函数就是为此设计的。

1、构造函数

构造函数一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,在创建对象时可自动执行。构造函数的功能由用户定义,用户根据初始化要求设计函数体和函数参数。

#include <iostream>
using namespace std;
class Time//定义类的类型
{
public:
	Time()//定义构造函数
	{
		hour = 0;
		minute = 0;
		second = 0;
	}
	void set_time();	//公用成员函数原型声明
	void show_time();	//公用成员函数原型声明
private:
	int hour;
	int minute;
	int second;
};

void Time::set_time()
{
	cin >> hour >> minute >> second;
	cin.get();
}
void Time::show_time()
{
	cout << hour << ":" << minute << ":" << second << endl;
}

int main()
{
	Time t1;		//创建对象t1
	t1.set_time();	//使用成员运算符调用成员函数
	t1.show_time();
	Time t2;		//创建对象t2
	t2.show_time();
	cin.get();
	return 0;
}

可以看出构造函数有如下特点:

(1)构造函数的名字必须与类名相同,编译系统以此识别并将它作为构造函数处理;

(2)构造函数一般声明为public,无返回值,因此无须定义返回类型;

(3)构造函数是系统自动调用的,且只能执行一次。

上面的例子中,构造函数Time不带参数,在函数体中直接对数据成员赋初值。这样使得该类的每个对象都得到同一组初值。如果希望不同的对象得到不同的初值,可以采用带参数的构造函数。在调用构造函数时,为其传递不同的参数以实现不同的初始化。

//有两个长方体,长宽高分别为(1)12,25,30;(2)15,30,21.用带参数的构造函数编写程序求其体积。
#include <iostream>
using namespace std;
class Box						//定义类的类型
{
public:
	Box(int h, int w, int l);	//类外定义的构造函数声明(带参数的构造函数)
	int volume();				//类外定义的普通公用成员函数声明
private:
	int height;					//私有数据成员
	int width;
	int length;
};
Box::Box(int h, int w, int l)	//类外定义的构造函数定义(具体实现)
{
	height = h;
	width = w;
	length = l;
}
int Box::volume()				//类外定义的普通公用成员函数定义(具体实现)
{
	return (height*width*length);
}
int main()
{	//给不同对象指定初值
	Box box1(12, 25, 30);		//建立对象box1并指定长宽高的值
	cout << "The volume of box1 is " << box1.volume() << endl;
	Box box2(15, 30, 21);		//建立对象box2并指定长宽高的值
	cout << "The volume of box2 is " << box2.volume() << endl;
	cin.get();
	return 0;
}

可以看出:(1)带参数的构造函数中的形参,其对应的实参在定义对象时给定;(2)使用带参数的构造函数可以方便的实现不同对象的不同初始化。

构造函数中的参数可以通过实参传递,也可指定为某些默认值。比如,可在构造函数声明时将上述例子中长宽高设置为默认10:

Box(int h = 10, int w = 10, int l = 10);	//类外定义的构造函数声明(含默认参数的构造函数)

程序中对构造函数的定义也可改写成参数初始化表的形式:

Box::Box(int h, int w, int l):height(h), width(w), length(l){}	//类外定义的构造函数定义(具体实现)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值