请教各位大侠下面C++代码的运行原理

Vector step, step_2(3.9, 4.9), step_3(8.0, 9.9);
Vector result(0.0, 0.0);
Vector m=step_3;
step_2=step_3;
Vector d=step+step_2+step_3; //a
result=step+step_2+step_3;
有一个Vector类,我对它的构造函数,析构函数和拷贝构造函数都添加了一些提示信息,上面的代码对于 a行不同的编译器会有不同的操作,下面是我的编译器的输出结果,请教各位对于a行,其运行机制是怎么样?第6个生成的对象是一个临时对象还是说是Vector对象d?
字数限制,Vector类有一个number_count的静态变量用来统计Vector实例的数目,每次调用构造或者拷贝构造函数number_count加1,每调用一次析构函数number_count减1,
每调用一次构造函数就输出一句:Vector constructor called. The number_count Vector object constructed;每调用一次拷贝才行函数就输出一句:Vector Copy Constructor called. The number_count Vector object constructed
,每调用一次析构函数就输出一句:Vector destructor called. The number_count Vector object destructed.

记住一点,c++里面创建 任何一个对象 都会调用这个类的构造函数,使用完后就调用析取函数,可能是隐式的,也可能是显示的。
另外,所有的数据类型都是一个类,都有析取,构造函数追问

问题就在这里,如果遇到一个赋值表达式,表达式的左边是一个新的类实例,表达式的另外一边则是一个已经存在的类实例运算表达式,右边的最终计算结果临时类实例是肯定会调用类的构造函数的,那请问表达式左边的新实例和右边还会要调用构造函数吗?

追答

你举个例子不行吗,什么类实例乱七八糟的翻译,不知道你说什么,instance / entity 这叫 实体 吧 , 你只要记着C++ 是强类型的,一定define一个object便必须初始化,通过赋值、复制、或者默认的、神奇的编译器也可能会通过synthesize给你弄个初始化。。。想搞上层应用的话学JAVA,所有C++的编译器都太强大、太诡异了,C++被搞的尾大不掉,而C++实质是C,还把C 的简洁给丢掉了。现在有不懂的,不要管他,要温故而知新,以后就懂了,重要的是封装、继承、设计模式这些思想。

追问

我上面说的就是这句话:Vector d=step+step_2+step_3;Vector类的实例d是用右边的表达式进行初始化的,你对照着上面我说的就明白我想要问的东西了

追答

operator+ operator= 之类的 操作符重载 、 引用 、析取函数是会自动调用的,你自己去看书吧 , 推荐 thinking in C++ 英文版第一卷写得很好,看懂那本书你C++基础就不错了,这些东西也就知道了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-06
就你点这代码,谁想去看呢,还要半天的理解,你能规范点吗?把完整的贴出来啊
第2个回答  2012-04-06
你敲这么多字还不如直接贴代码,你这样还看不懂
相似回答