• 8、关于复制构造函数和析构函数的又一个例子


    #include <iostream>
    using namespace std;
    class CMyclass {
    	public:
    	CMyclass() {};//无参构造函数
    	CMyclass( CMyclass & c){ //复制构造函数
    	cout << "copy constructor" << endl;
    	}
    	~CMyclass() { cout << "destructor" << endl; }//析构函数
    };
    
    void fun(CMyclass obj_ )
    {
    	cout << "fun" << endl;
    }
    CMyclass c;
    CMyclass Test( )
    {
    	cout << "test" << endl;
    	return c;
    }
    int main(){
    	CMyclass c1; 	//创建c1,并调用无参构造函数初始化c1
    	fun( c1);		//创建形参obj_ ,调用复制构造函数,将实参c1的值复制到形参obj_ 中		
    	Test();
    	return 0;
    }
    /*
    输出结果:
    copy constructor				调用复制构造函数初始化:fun()形参obj_
    fun								执行fun
    destructor 						//形参obj_消亡
    test							进入Test()
    copy constructor				构造一个临时对象,调用复制构造函数,将全局变量c的内容复制到这个临时对象中(初始化)
    destructor 						//Test();调用结束, 返回值临时对象消亡 
    destructor 						// 局部变量消亡
    destructor 						// 全局变量消亡
    */
    

    关于使用构造函数考虑的点:
    (1)见到创建对象的句子:
    考虑:先创建对象,
    创建对象时使用参数:带参数的构造函数初始化该对象。
    创建对象时没有使用参数初始化:使用不带参数的构造函数初始化该对象。
    (2)见到函数返回一个对象的句子:
    考虑:调用该函数时,返回语句一定会创建一个临时对象,这个临时对象使用复制构造函数进行初始化,将返回的值复制给这个临时对象。
    (3)函数的形参为类对象的句子:
    调用该函数时,一定会创建一个形参对象,该形参对象使用复制构造函数或者使用转换构造函数进行初始化。
    (3)见到为对象赋值的句子:
    等号两边类型相同:将右边赋值给左边。
    等号两边类型不同:等号右边是否有课匹配的转换构造函数,如果有,将其转换为一个临时的对象,然后赋值给左边。

  • 相关阅读:
    基于Python的数据分析(1):配置安装环境
    Learn flask in the hard way:配置环境的安装
    网络云盘的存储机制
    读书笔记:云计算概念、技术和架构
    小型开发团队中项目管理的方法及原则
    华为专家谈CMDB建设
    2018软件工程第二次作业——个人项目
    福大软工1816 · 第一次作业
    python学习摘要(3)--字符串处理函数
    python学习摘要(4)--列表简单处理
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764282.html
Copyright © 2020-2023  润新知