good1调用默认的构造函数
good2调用带有三个参数的构造函数
good3调用拷贝构造函数
good1 = good3,good1调用赋值运算函数
good4调用带有3个参数的构造函数
析构顺序是5,4,3,2,1
2,3之间先调用带有三个参数的构造函数,构造临时对象,
调用赋值运算符重载函数用产生的临时对象给已经存在的good1对象赋值,最后临时对象析构
类对象的生存周期:
3,4之间,先调用带有float类型参数的构造函数,构造临时对象,再调用赋值运算符重载函数用产生的临时对象给good1赋值,最后析构临时变量
4,5之间,先调用带有float类型参数的构造函数,构造临时变量,再调用赋值运算符重载函数用产生的临时变量给good1赋值,最后析构临时变量。
5,6之间,用指针p指向临时对象,p先调用带有三个参数的构造函数,构造临时变量,然后析构临时变量,
q在出了main函数右括号才析构
因为临时对象的周期 提升成为 引用变量的生存周期,引用变量什么时候结束,临时变量就什么时候结束
临时量出了语句才结束,
explicit 禁止隐士生成对象,
成员方法const的意义
1.保护实参不被修改,不能去掉
2.为了引用隐式生成的临时量
如果去掉const,内置类型产生的临时量都是常量(临时量放在寄存器中),不能被修改,
自定义类型产生的临时量都是变量(放在内存中),可以被修改,
隐式产生的临时量都是常对象,89.5-》const CGood(89.5),常对象一定要用常引用来引用,