C++_复习01(构造函数与析构函数的基本概念与应用)

一、类的构造和析构的基本概念

1.1 构造函数和析构函数的概念

构造函数的定义:

  1. C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数。
  2. 构造函数在定义的时候可以有参数
  3. 没有任何返回类型的声明

构造函数的调用:

  • 自动调用:一般情况下C++编译器会自动调用构造函数
  • 手动调用:在一些情况下则需要手工调用构造函数

析构函数的定义:

  1. C++中的类可以定义一个特殊的成员函数清理对象,这个特殊的成员函数叫做析构函数  语法:~ClassName()
  2. 析构函数没有任何参数没有任何返回类型的声明
  3. 析构函数在对象销毁的时候自动调用

析构函数的机制:

  • C++编译器自动调用

二、例子说明

2.1 例一

class Test
{
public:
	Test()//无参数,析构函数
	{
		cout << "我是析构函数,被执行了" << endl;
	}
	
	~Test()//析构函数
	{
		cout << "我是析构函数,被调用了" << endl;
	}

};

void main()
{
	Test t1, t2;
	system("pause");
}

结果:(因为使用了systempause所以类执行到这个地方的时候就停住了,所以我们可以通过搭建一个舞台来展示构造和析构函数的过程)

2.2 例二(改进)

class Test
{
public:
	Test()//无参数,析构函数
	{
		cout << "我是析构函数,被执行了" << endl;
	}
	
	~Test()//析构函数
	{
		cout << "我是析构函数,被调用了" << endl;
	}

};

//给对象搭建一个舞台,研究对象完整的生命周期
void objectplay()
{
	Test t1; //这是一个局部变量,当函数运行完毕后
	//内存将会被回收,此时执行了析构函数

	Test t2;//要是定义两个对象,两个对象都会调用析构和构造函数
	//析构的时候县创建的对象后释放,构造的时候县创建的先构造
}

void main()
{
	objectplay();
	system("pause");
}

结果(可以单步调试看析构函数与构造函数执行顺序)

特别注意:定义多个对象时,析构的时候先创建的对象后释放,构造的时候先创建的先构造

2.3 如何使用构造函数和析构函数的例子

class Test
{
public:
	Test()//无参数,析构函数
	{//完成对属性的初始化工作
		a = 10;
		p = (char *)malloc(100);
		strcpy_s(p,  strlen("aaaabbbb")+1, "aaaabbbb");//注意是strlen(temp)+1
		cout << "我是析构函数,被执行了" << endl;
	}
	
	void print()
	{
		cout << p << endl;
		cout << a << endl;
	}

	~Test()//析构函数 
	{//这样就不会有内存泄漏
		if (p != NULL)
		{
			free(p);
		}
		cout << "我是析构函数,被调用了" << endl;
	}
private:
	int a;
	char *p;
};

//给对象搭建一个舞台,研究对象完整的生命周期
void objectplay()
{
	Test t1; //这是一个局部变量,当函数运行完毕后
	//内存将会被回收,此时执行了析构函数
	t1.print();//使用它

	Test t2;//要是定义两个对象,两个对象都会调用析构和构造函数
	//析构的时候县创建的对象后释放,构造的时候县创建的先构造
	t2.print();
}

int main()
{
	objectplay();
	system("pause");
}

发布了27 篇原创文章 · 获赞 3 · 访问量 3344

猜你喜欢

转载自blog.csdn.net/weixin_40977054/article/details/102367561
今日推荐