zoukankan      html  css  js  c++  java
  • 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<<"	"<<name<<"	"<<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<<"	"<<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<<"
    this is some content before the end
    ";//这是一段位于main函数结束之前,函数调用之后的内容
    	cout<<endl;
    	return 0;
    }
    


    结果显示:

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

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

  • 相关阅读:
    python 多线程测试
    python 多线程join()
    python 多线程 t.setDaemon(True):
    线程锁
    python 多线程
    模板渲染和参数传递.
    求两个数组的交集
    java数组并集/交集/差集(补集)
    java各种集合的线程安全
    页面跳转和重定向
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3299332.html
Copyright © 2011-2022 走看看