c++深复制问题
题目要求:定义素数类Prime,该类有数据成员:
intnum 保存素数的个数,
int *pn 指向动态申请的整型数组,保存前num个素数。
void create()函数,产生前num个素数,保存在pn指向的数组中。
定义Prime类的构造函数、深复制构造数、析构函数,输出数组中所有素数的函数。并在主函数定义Prime类的对象,调用成员函数。
出现问题:
深复制对象没有数据结果。
代码附上:
#include<iostream>
using namespace std;
class Prime
{
private:
int num;
int *pn;
public:
Prime(int n,int *p)
{
num=n;
int begin,i,j=0,n1=0;
if(pn!=NULL)
{
pn=new int;
for(begin=1;n1<=num;begin++)
{
for(i=2;i<begin;i++)
{
if(begin%i==0)break;
}
if(i>=begin)
{
pn=begin;
n1++;
}
}
}
}
~Prime()
{
if(pn!=NULL)
{
cout<<"\n"<<"对象被析构";
delete [] pn;
}
}
Prime(Prime& pp)
{
int i=0;
int size=pp.num;
pn=new int;
if(pn!=NULL)
{
for(i=0;i<size;i++)
{
pn=pp.pn;
}
}
}
void create(int n)
{
num=n;
}
void show()
{
int i;
for(i=0;i<num;i++)cout<<pn<<" ";
}
};
int main()
{
int *p;
p=new int;
Prime p1(10,p);
Prime p2(p1);
cout<<"\n"<<"对象p1前十个素数为:"<<"\n";
p1.show();
cout<<"\n"<<"深复制对象p2前十个素数为:"<<"\n";
p2.show();
cout<<"\n"<<"改变素数个数:"<<"\n";
p1.create(5);
p1.show();
}
运行结果:
拷贝构造里没给num赋值 Junpei 发表于 2020-10-29 23:33
拷贝构造里没给num赋值
这个num不就是数据成员么,直接访问就行了,赋啥值。。。 num没有初始化 复制构造函数中把P1的num复制给了size,没有给p2的num,所以p2的num没有被赋值,调用show时p2的num为初值0
页:
[1]