鱼C论坛

 找回密码
 立即注册
查看: 1723|回复: 4

c++深复制问题

[复制链接]
发表于 2020-10-29 17:39:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目要求:
定义素数类Prime,该类有数据成员:
int  num 保存素数的个数,
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[num];
                               
                                for(begin=1;n1<=num;begin++)
                                {
                                        for(i=2;i<begin;i++)
                                        {
                                                if(begin%i==0)break;
                                        }
                                        if(i>=begin)
                                        {
                                                pn[j++]=begin;
                                                n1++;
                                        }
                                }
                        }
                }
                ~Prime()
                {
                        if(pn!=NULL)
                        {
                                cout<<"\n"<<"对象被析构";
                                delete [] pn;
                        }
                       
                }
                Prime(Prime& pp)
                {       
                        int i=0;
                        int size=pp.num;
                        pn=new int[size];
                       
                        if(pn!=NULL)
                        {       
                                for(i=0;i<size;i++)
                                {
                                        pn[i]=pp.pn[i];
                                }
                                       
                        }
                       
                }
                void create(int n)
                {
                        num=n;
                       
                }
                void show()
                {
                        int i;
                        for(i=0;i<num;i++)cout<<pn[i]<<" ";
                }       
};

int main()
{
        int *p;
        p=new int[10];
        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();
}

运行结果:

{IV[WJ7$K$}NBO6J{X`~%ID.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-29 23:33:11 From FishC Mobile | 显示全部楼层
拷贝构造里没给num赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-30 14:56:14 | 显示全部楼层
Junpei 发表于 2020-10-29 23:33
拷贝构造里没给num赋值

这个num不就是数据成员么,直接访问就行了,赋啥值。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-30 16:48:31 | 显示全部楼层
num没有初始化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-31 13:13:00 From FishC Mobile | 显示全部楼层
复制构造函数中把P1的num复制给了size,没有给p2的num,所以p2的num没有被赋值,调用show时p2的num为初值0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 19:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表