为什么没有拷贝构造函数

#include
using namespace std;
class point
{ public :
point(int a) { x = a; cout << x << endl; }
point(point & p) { x = p.x; cout << x << endl; }
void addx(int a) { x += a; }
private :
int x;
};
int main()
{
point p1(10), p2(p1);
p2.addx(2);
point p3 = p2;
system("pause");
return 0;
}
结果是 10 10 12 为什么不是10 10 12 12

整个main函数中会产生输出的地方有三处,p1(10),为带参数构造函数,调用的是point(int a),输出10;p2(p1),为拷贝构造函数,调用的是point(point& p) ,输出10; point p3 = p2同样也是调用拷贝构造函数,其实和point p3(p2)的作用是一样的,都会调用point(point &p),输出12.此处要注意和赋值函数的区分,如果在point p3 = p2;后再加上一句p3 = p1,则不会调用point(point &p),而是会调用缺省的赋值函数