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;
    }
    

      

    输出

  • 相关阅读:
    娃娃机 解题报告
    ecshop
    多字节字符串 函数
    电商中设置满包邮,满减等促销搞活动;电商平台同步到第三方,日志记录
    PHP文件操作
    apache重写字段详细说明
    httpc服务器错误类型大全
    正则入门简易
    php100 编程小技巧
    memcache
  • 原文地址:https://www.cnblogs.com/c-slmax/p/5183134.html
Copyright © 2011-2022 走看看