C++学习(四):构造函数和析构函数

1 构造函数

按照上一节讲的,我们如果要初始化数据成员,需要按照下面这样定义一个公有函数。

class Test
{
public:
	void InitTest(int d = 1)
	{
		data = d;
	}
private:
	int data;
}

void main()
{
	Test t;
	t.InitTest(100);  //结果是100
}

可以看到,我们在类中定义的大多数数据成员都是私有的,一开始定义的数据成员是个随机值。如果要对它们进行初始化,必须用一个公有函数来进行。同时这个函数应该在且仅在定义对象时自动执行一次。称为 构造函数(constructor)。

构造函数是特殊的公有成员函数,其特征如下:

  1. 函数名与类名相同;
  2. 构造函数无函数返回类型说明。即什么也不写,也不可写void!实际上构造函数有返回值,返回的就是构造函数所创建的对象;
  3. 在程序运行时,当新的对象被建立,该对象所属的类的构造函数自动被调用,在该对象生存期中也只调用这一次;
  4. 构造函数可以重载。严格地讲,说明中可以有多个构造函数,它们由不同的参数表区分,系统在自动调用时按一般函数重载的规则选一个执行。
  5. 构造函数可以在类中定义,也可以在类外定义;
  6. 如果类说明中没有给出构造函数,则C++编译器会自动给出一个缺省的构造函数,形如: 类名( ) { }。这也是能够创建对象,进行实例化的原因。但如果定义了任何一个构造函数,系统就不会再给你提供。

-----------------------------------------------------------------------------------------------------------------------------------------
以下是对这些特征进行说明和举栗。

在这里插入图片描述所以我们在初始化私有成员变量时,可以直接在构造函数里写出来,比如上面,直接定义 data = 0,下面三个对象中的私有成员data都是初始化是0。

第4条,当有不同参数时,允许重载,我们举个栗子:

class Test
{
public:
	Test()
	{
		data = 0;
	}
	Test(int d)
	{
		data = d;
	}
	Test(int d, int x, int y)
	{
		data = d;
		this->x = x;
		this->y = y;
	}
private:
	int data;
	int x;
	int y;
}

void main()
{
	Test t1;
	Test t2(10);
	Test t3(1,2,3);
}

第5条,构造函数与其他公有函数一样,也可以在函数外进行,举个栗子:

//返回值 类名::函数名(参数列表)
Test::Test(int x,int y)
{
	this->x = x;
	this->y = y;
}
void main()
{
	Test t4(10,20);
}

2 析构函数

这个与构造函数是相反的过程,当一个对象定义时,C++自动调用构造函数建立该对象并进行初始化,而当一个对象的生命周期结束时,C++也会自动调用一个函数注销该对象并进行善后工作,这个特殊的成员函数就是析构函数(destructor)。

析构函数的特征如下:

  1. 析构函数名与类名相同,但在前面加上字符 ~, eg. ~CGoods( )
  2. 析构函数无函数返回类型,这点与构造函数一样。但析构函数不带任何参数;
  3. 一个类有且只有一个析构函数,其可以缺省;
  4. 对象注销时,系统自动调用析构函数。

即人生的不一样,有马爸爸的儿子,盖茨的儿子,贾宝玉…但死的时候任何人都是一样的。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值