秃然的凯 发表于 2020-10-29 17:39:48

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();
}

运行结果:

Junpei 发表于 2020-10-29 23:33:11

拷贝构造里没给num赋值

秃然的凯 发表于 2020-10-30 14:56:14

Junpei 发表于 2020-10-29 23:33
拷贝构造里没给num赋值

这个num不就是数据成员么,直接访问就行了,赋啥值。。。

萌出血 发表于 2020-10-30 16:48:31

num没有初始化

stormfat 发表于 2020-10-31 13:13:00

复制构造函数中把P1的num复制给了size,没有给p2的num,所以p2的num没有被赋值,调用show时p2的num为初值0
页: [1]
查看完整版本: c++深复制问题