zoukankan      html  css  js  c++  java
  • C++类构造析构调用顺序训练(复习专用)

    //对象做函数参数
    //1 研究拷贝构造 
    //2 研究构造函数,析构函数的调用顺序
    
    //总结 构造和析构的调用顺序
    
    #include "iostream"
    using namespace std;
    
    class ABCD
    { //this()
    public:
    	ABCD(int a, int b, int c)
    	{
    		this->a = a;
    		this->b = b;
    		this->c = c;
    		printf("ABCD() construct, a:%d,b:%d,c:%d  
    ", this->a, this->b, this->c);
    	}
    	~ABCD()
    	{
    		printf("~ABCD() construct,a:%d,b:%d,c:%d  
    ", this->a, this->b, this->c);
    	}
    	int getA()
    	{
    		return this->a;
    	}
    protected:
    private:
    	int a;
    	int b;
    	int c;
    };
    
    
    class MyE
    {
    public:
    	MyE() :abcd1(1, 2, 3), abcd2(4, 5, 6), m(100)
    	{
    		cout << "MyD()" << endl;
    	}
    	~MyE()
    	{
    		cout << "~MyD()" << endl;
    	}
    	MyE(const MyE & obj) :abcd1(7, 8, 9), abcd2(10, 11, 12), m(100)
    	{
    		printf("MyD(const MyD & obj)
    ");
    	}
    
    protected:
    	//private:
    public:
    	ABCD abcd1; //c++编译器不知道如何构造abc1
    	ABCD abcd2;
    	const int m;
    
    };
    
    int doThing(MyE mye1)
    {
    	printf("doThing() mye1.abc1.a:%d 
    ", mye1.abcd1.getA());
    	return 0;
    }
    
    int run2()
    {
    	MyE myE;
    	doThing(myE);
    	return 0;
    }
    
    //
    int run3()
    {
    	printf("run3 start..
    ");
    
    	ABCD abcd = ABCD(100, 200, 300); //用临时对象来初始化一个对象,就会把临时对象变化成要初始化的对象,而不会调用copy构造函数,临时对象也不用将自己赋值给对方,然后自己销毁这么麻烦.
    
    
    
    	//ABCD(400, 500, 600); //临时对象的生命周期
    	printf("run3 end
    ");
    	return 0;
    }
    
    int main()
    {
    	run2();
    	//run3();
    	system("pause");
    	return 0;
    }
    

      

    输出

  • 相关阅读:
    9.对话框
    8.布局管理器
    7.对象模型
    6.添加动作
    5.Qt模块简介
    4.自定义信号槽
    3.信号槽
    2.Helloworld
    1.Qt简介
    Problem E: 成绩排序
  • 原文地址:https://www.cnblogs.com/c-slmax/p/5183134.html
Copyright © 2011-2022 走看看