类的构造函数与析构函数

构造析构 构造函数 构造函数的定义 class 类名{ public: 类名();//构造函数 } 构造函数无返回类型也不需要写void 构造函数会自动调用,无定义时为空实现。因此需要我们定义构造函数进行数据的初始化 构造函数可以有参数也可以无参数,因此根据参数的类型构造函数可发生重载,且构造函数只能被调用一次。

构造函数可按有无参数分为有参构造函数和无参构造函数 构造函数按类型可分为普通构造函数和拷贝构造函数

构造函数参数类型
一无参构造函数普通构造函数
二有参构造函数拷贝构造函数

注意 不要用拷贝构造函数进行初始化匿名对象 编译器会认为book(b2);等于book b2;会造成重定义

以下为调用构造函数的实例:

#include<iostream>
using namespace std;
class book
{
public:
	book()
	{
		cout << "类的无参构造函数" << endl;
	}
	book(int a)
	{
		b = a;
		cout << "类的有参构造函数" << b << endl;
	
	}
	book(const book& b)
	{
		cout << "类的拷贝构造函数" << b.b << endl;
	}
	int b;
};
void test()
{
    //调用有三种方法调用
	//括号法
	book b1;
	book b2(10);
	book b3(b2);

	//显示法
	book b4;
	book b5 = book(10);
	book b6 = book(b5);

	//隐式转换法
	book b7 = 10;
	book b8 = b7;
}
int main()
{
	test();
	return 0;
}

注意

  1. 括号法的第一个: book b1; 不要在b1后面加(),如果加了会造成二义性,编译器无法识别
  2. 构造函数的实例中的显示法的book(10)为匿名对象

析构函数 析构函数的定义 class 类名{ public: ~类名();//析构函数 }

析构函数与构造函数的区别

相同 都会自动调用 不同

  1. 在类名前加"~"
  2. 析构函数无返回值且无参数,因此不可发生重载
  3. 析构函数发生在对象的销毁时
  4. 析构函数主要用于数据的销毁工作

以下为调用析构函数的实例:

#include<iostream>
using namespace std;
class person
{
public:
	~person()
	{
		cout << "类的析构函数" << endl;
	}
};
void test()
{
	person p1;
}
int main()
{
	test();
	person p2;
	system("pause");
	return 0;
}

注意:当运行到system("pause");时暂停,p2仍在main函数中,main函数为结束,因此p2为进行销毁,所以p2还未调用析构函数,当按任意键继续时main函数结束,p2内存回收,因此才会调用析构函数打印出信息。

更新于 2024/04/30

评论

评论 0

暂无评论