c++构造函数,对象再赋值

为什么已经定义的对象还可以再次定义呢?A a1(7.0, 3.0);之后再次对a1 = A(7.2, 3.0);定义,仍然可以。
a1 = A(7.2, 3.0);这里为什么还会调用一次构造函数,和析构函数


#include 
using namespace std;
class  A {
    float   x, y;
public:
    A() { x = 0;  y = 0;  cout << "调用无参数的构造函数\n"; }
    A(float  a) { x = a;  y = 0;  cout << "调用一个参数的构造函数\n"; }
    A(float a, float b) { x = a; y = b; cout << "调用两个参数的构造函数\n"; }
    A(A& a) { x = a.x; y = a.y; cout << "调用拷贝构造函数\n"; }
    ~A() { cout << "调用析构函数" << endl; }
    void Print(void) { cout << x << '\t' << y << endl; }
};

void main(void)
{
    A  a1(7.0, 3.0);
    a1.Print();
    a1 = A(7.2, 3.0);
    a1.Print();
    a1 = A(8);
    a1.Print();
    A  a2(a1);
}

运行结果:

img

A a1(7.0, 3.0)----这是新定义变量a1
a1 = A(7.2, 3.0); ---这是修改变量a1,指向新创建的A对象,这里不是a1的定义啊
类比一下:
int a = 10;
a = 20; //相当于这一行,不是重新定义a,而是给a赋予一个新值而已
=======
a1 = A(7.2,3.0)中,右侧A(7.2,3.0)会调用构造函数,产生一个隐式A类型变量,然后将这个变量值赋值给a1,这个隐式A类型变量最后也会析构释放