C++中的构造函数和析构函数

构造函数:

在类实例化对象时自动执行,对类中的数据进行初始化。构造函数可以从载,可以有多个,但是只能有一个缺省构造函数。

析构函数:

在撤销对象占用的内存之前,进行一些操作的函数。析构函数不能被重载,只能有一个。


调用构造函数和析构函数的顺序:

先构造的后析构,后构造的先折构。它相当于一个栈,先进后出。

 

#include<iostream>
#include<string>
using namespace std;
class Student{
	public:
		Student(string,string,string);
		~Student();
		void show();
	private:
		string num;
		string name;
		string sex;
};
Student::Student(string nu,string na,string s){
	num=nu;
	name=na;
	sex=s;
	cout<<name<<" is builded!"<<endl;
}
void Student::show(){
	cout<<num<<"\t"<<name<<"\t"<<sex<<endl;
}
Student::~Student(){
	cout<<name<<" is destoried!"<<endl;
}
int main(){
	Student s1("001","千手","男");
	s1.show();
	Student s2("007","纲手","女");
	s2.show();
	cout<<"nihao"<<endl;
	cout<<endl;
	cout<<"NIHAO"<<endl;
	return 0;
}


 

先构造的千手,结果后析构的千手;后构造的纲手,结果先折构的纲手。


特点:

在全局范围定义的对象和在函数中定义的静态(static)局部对象,只在main函数结束或者调用exit函数结束程序时,才调用析构函数。

如果是在函数中定义的对象,在建立对象时调用其构造函数,在函数调用结束、对象释放时先调用析构函数。

 

#include<iostream>
#include<string>
using namespace std;
class Student{
	public:
		Student(string,string);
		~Student();
		void show();
		string num;
		string name;
};
Student::Student(string nu,string na){
	num=nu;
	name=na;
	cout<<name<<" is builded!"<<endl<<endl;
}
void Student::show(){
	cout<<num<<"\t"<<name<<endl<<endl;
}
Student::~Student(){
	cout<<name<<" is destoried!"<<endl<<endl;
}
void fun(){
	cout<<"============调用fun函数============"<<endl<<endl; 
	Student s2("002","自动局部变量");//定义自动局部对象 
	s2.show();
	static Student s3("003","静态局部变量");//定义静态局部变量 
	s3.show();
	cout<<"===========fun函数调用结束=============="<<endl<<endl;
}
int main(){
	Student s1("001","全局变量");
	s1.show();
	fun();
	cout<<"\nthis is some content before the end\n";//这是一段位于main函数结束之前,函数调用之后的内容
	cout<<endl;
	return 0;
}


 

结果显示:

在函数内部定义的自动局部变量在fun函数调用结束以后就立即执行了析构函数;

而全局变量和静态局部变量是在main函数结束之前才执行了折构函数,并且遵循了先构造后析构,后构造先析构的原则。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值