C++动态创建对象数组的问题?

来源:百度知道 编辑:UC知道 时间:2024/07/04 02:50:58
程序如下:
#include <iostream>
using namespace std;
class Point
{
public:
Point()
{X=Y=0; cout<<"Default Constructor called."<<endl;}
Point(int xx,int yy)
{X=xx;Y=yy; cout<<"Constructor called."<<endl;}
~Point()
{cout<<"Destructor called."<<endl;}
int GetX() {return X;}
int GetY() {return Y;}
void Move(int x,int y) {X=x;Y=y;}
private:
int X,Y;
};

int main()
{
Point *Ptr=new Point[2];
Ptr[0].Move(5,10);
Ptr[1].Move(15,20);
cout<<"Deleting..."<<endl;
delete[] Ptr;
}

以下是运行结果:
Default Constructor called.
Default Constructor called.
Deleting...
Destructor called.
Destructor called.

我的问题:
1、执行Point *Ptr=new Point[2];这句语句时,有没有调用构造函数,调用的是哪一个构造函数?
2、执行Ptr[0].Move(5,10); Ptr[1].Move(15,20);这两句语句时,重复1的问题。

以下是运行结果:
Default Constructor called.
Default Constructor called.
Deleting...
Destructor called.
Destructor called.
你的结果已经很明白了啊!
1.都调用了默认构造函数,因为你创建2个对象时都未给参数;
2.执行这两句时,对象空间已经分配好了,不调用构造函数了.只是执行附值的任务;
3.因为你是用new分配的动态数组空间,数组空间的释放就必须写[],其实在这儿是省略了[2]中的2的;
4.delete[] Ptr;对应的是Deleting...;后面那2句是析构函数根据你的构造函数自动调用的,作用是释放不同构造函数申请的动态内存;

1.创建了 当然要调用构造函数
Point() ---构造函数
2.无。。。
3.动态
4,~Point()--析构函数

1.有调用构造函数:是Point() 因为没有传参数。。因为定义了数组,所以调用了两次
2.执行Ptr[0].Move(5,10); Ptr[1].Move(15,20);这两句语句时,没有调用构造函数
3.delete[] Ptr ,因为ptr是数组。所以加了 []
4.同一,对应的先前的两个piont数组。