C++动态创建对象数组的问题?
程序如下:#include<iostream>usingnamespacestd;classPoint{public:Point(){X=Y=0;cout<<"Defau...
程序如下:
#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的问题。
3、delete[] Ptr;中的为什么要加上“方括号”?
4、delete[] Ptr;语句又是调用了哪两句程序? 展开
#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的问题。
3、delete[] Ptr;中的为什么要加上“方括号”?
4、delete[] Ptr;语句又是调用了哪两句程序? 展开
4个回答
展开全部
以下是运行结果:
Default Constructor called.
Default Constructor called.
Deleting...
Destructor called.
Destructor called.
你的结果已经很明白了啊!
1.都调用了默认构造函数,因为你创建2个对象时都未给参数;
2.执行这两句时,对象空间已经分配好了,不调用构造函数了.只是执行附值的任务;
3.因为你是用new分配的动态数组空间,数组空间的释放就必须写[],其实在这儿是省略了[2]中的2的;
4.delete[] Ptr;对应的是Deleting...;后面那2句是析构函数根据你的构造函数自动调用的,作用是释放不同构造函数申请的动态内存;
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()--析构函数
Point() ---构造函数
2.无。。。
3.动态
4,~Point()--析构函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.有调用构造函数:是Point() 因为没有传参数。。因为定义了数组,所以调用了两次
2.执行Ptr[0].Move(5,10); Ptr[1].Move(15,20);这两句语句时,没有调用构造函数
3.delete[] Ptr ,因为ptr是数组。所以加了 []
4.同一,对应的先前的两个piont数组。
2.执行Ptr[0].Move(5,10); Ptr[1].Move(15,20);这两句语句时,没有调用构造函数
3.delete[] Ptr ,因为ptr是数组。所以加了 []
4.同一,对应的先前的两个piont数组。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一种先是定义3个指向student类的指针数组,然后每一个指向这个类的指针元素都用构造函数初始化,而第二种就是定义一个指针,动态分配3个数组,数组里面的元素就是那个类的对象,
简单来说,第一种是定义指针数组,而数组里面的元素是那个类的对象的地址
而第二种就是直接是3个数组,存的元素直接是类的对象本身,而不是地址
不知道我这样解析你懂吗
简单来说,第一种是定义指针数组,而数组里面的元素是那个类的对象的地址
而第二种就是直接是3个数组,存的元素直接是类的对象本身,而不是地址
不知道我这样解析你懂吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询