complex com1, com2(5.6, 7.5); // thj: 构造2; thj: 构造3
complex com3=com1; // thj: 构造4;
com3.print();
com1 是采用默认构造函数, 值为0, com3 调用拷贝构造函数, 所以值为0
global.print(); gobal 对象为全局对象,初始时调用的是默认构造函数,代码中为对其赋值,所以值为0
Destructor //此处是撤销com3吧?
Destructor //此处是撤销com2吧?
Destructor //此处是撤销com1吧?如果上述成立,那全局的对象global也应该要撤销吧?为啥没
这具体是依据什么顺序进行析构,不好判断。 你可以在添加一个可以表示对象名称的类成员,然后打印测试。
gobal 对象是全局对象, 不会在main这个主函数中析构。 具体再哪里析构我也不知道, 有知道的朋友可以告诉一声。
0+0i //中的不应该是 0.0+0.0i 吗。。希望详细解释一下
这个跟你cout 的格式化相关的设置有关,不打印小数点后面的。
全局变量的初始化和析构确实有点复杂,c++ 也没说具体什么时候做的,只说保证在使用之前初始化。一般程序运行是是有专门一块独立内存区域来放这种全局变量的。
当有多个全部变量时,很确定那个变量先初始化。这样很容易导致很难发现的bug。
就你这个程序来说, global变量和 cout的那个初始化顺序就不清楚了,反正我是没确定global变量 构造函数调用是,这个cout已经初始化好了,可以使用了吗?然后还有析构的顺序,如果顺序不对,就不能正常 打印输出了。
所以google的c++编程规范里面是禁止这种,把类变量定义成全部变量的用法的。
参考:
http://zh-google-styleguide.readthedocs.org/en/latest/google-cpp-styleguide/scoping/#id8