一件很神奇的事情,为什么一个对象竟可以调用两次构造函数??!!
废话不说,先上代码
C/C++ code
这个例子中
只有一个对象a0,
但是输出了
调用默认构造函数
单参数构造函数
并且单步调试 发现 a0=2+3;
之后 a0的 x 值变成了5
说明调用了两次构造函数!!!!!惊讶!!!
可以有人解释一下为什么会调用两次呢??
并且 这个 等号= 的工作机制是什么啊?
为什么a0的x会变成5?
C/C++ code
#include<iostream> using namespace std; class A{ float x,y; public: A(){cout<<"调用默认构造函数"<<endl;} A(float a){x=a;y=0;cout<<"单参数构造函数"<<endl;} A(float a,float b){x=a;y=b;cout<<"2参数构造函数"<<endl;} A(A& a){x=a.x;y=a.y;cout<<"copy 构造函数"<<endl;} }; int main() { A a0; a0=2+3; return 0; }
这个例子中
只有一个对象a0,
但是输出了
调用默认构造函数
单参数构造函数
并且单步调试 发现 a0=2+3;
之后 a0的 x 值变成了5
说明调用了两次构造函数!!!!!惊讶!!!
可以有人解释一下为什么会调用两次呢??
并且 这个 等号= 的工作机制是什么啊?
为什么a0的x会变成5?
作者: zz457887107 发布时间: 2011-06-14
a0=2+3;
2+3等于5,用5调用 A(float a)构造函数构造一个临时对象temp,然后将temp赋给a0,赋值的时候使用缺省的赋值运算符,即位拷贝。
2+3等于5,用5调用 A(float a)构造函数构造一个临时对象temp,然后将temp赋给a0,赋值的时候使用缺省的赋值运算符,即位拷贝。
作者: dizuo 发布时间: 2011-06-14
楼上正解,顶
作者: autumn_xl 发布时间: 2011-06-14
引用 1 楼 dizuo 的回复:
a0=2+3;
2+3等于5,用5调用 A(float a)构造函数构造一个临时对象temp,然后将temp赋给a0,赋值的时候使用缺省的赋值运算符,即位拷贝。
a0=2+3;
2+3等于5,用5调用 A(float a)构造函数构造一个临时对象temp,然后将temp赋给a0,赋值的时候使用缺省的赋值运算符,即位拷贝。
++
严格地说,a0=2+3;这样的写法会调用Copy assignment operator
作者: pathuang68 发布时间: 2011-06-14
看过留名,没看懂- =~~~菜鸟飞过。。。
作者: Libylovexixi 发布时间: 2011-06-14
引用 1 楼 dizuo 的回复:
a0=2+3;
2+3等于5,用5调用 A(float a)构造函数构造一个临时对象temp,然后将temp赋给a0,赋值的时候使用缺省的赋值运算符,即位拷贝。
a0=2+3;
2+3等于5,用5调用 A(float a)构造函数构造一个临时对象temp,然后将temp赋给a0,赋值的时候使用缺省的赋值运算符,即位拷贝。
学习了
作者: sanshao1314 发布时间: 2011-06-14
临时变量
作者: nwpucoder 发布时间: 2011-06-14
位拷贝是什么东东?
作者: zhy905692718 发布时间: 2011-06-15