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

      

    输出

  • 相关阅读:
    分享
    慕课网-软件测试基础-学习笔记
    向量内积(点乘)和外积(叉乘)概念及几何意义
    使用opencv3+python实现视频运动目标检测
    解决opencv3运行opencv2代码时报错的修改备忘录
    分享
    OpenCV学习笔记
    LeetCode
    LeetCode
    npm安装包很慢
  • 原文地址:https://www.cnblogs.com/c-slmax/p/5183134.html
Copyright © 2020-2023  润新知