为什么已经定义的对象还可以再次定义呢?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);
}
运行结果:
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类型变量最后也会析构释放