请大家看看我这代码此处有什么问题


#include<bits/stdc++.h>
using namespace std;
class Big_Number{
public:
    Big_Number(); //构造函数 
    ~Big_Number(); //析构函数 
    Big_Number  &operator = (Big_Number && rhs)noexcept;  
    Big_Number(Big_Number &&)noexcept;  //移动构造 
    void read();  //读入数据 
    void display()const;  //显示并换行 
    void display(int x)const; //重载,显示不换行 
    int compare(const Big_Number &rhs)const;  //比较大小 
    void Compare_And_Display(const Big_Number &rhs);  //比较大小后显示 
    Big_Number plus(const Big_Number &rhs);  //加法 
    Big_Number subtraction(const Big_Number &rhs);  //减法 
    
private:
struct Node{
    int data;
    struct Node *pre;
    struct Node *next;
}*pHead,*pTail;

int len;   //链表长度 
};
//构造函数 
Big_Number::Big_Number(){
    pHead = new Node;
    pHead ->next =NULL;
}
//析构函数 
Big_Number::~Big_Number(){
    while(pHead){
        Node *p=pHead;
        pHead=p->next;
        delete p;
    } 
}
移动赋值
Big_Number & Big_Number::operator =(Big_Number &&rhs)noexcept{
    Node *p = this->pHead;
    this->pHead = rhs.pHead;
    rhs.pHead=p; 
    p = this->pTail; 
    this->pTail = rhs.pTail;
    rhs.pTail = p;
    this->len = rhs.len;
    return *this;
}  
 
//移动构造函数
Big_Number::Big_Number(Big_Number &&rhs)noexcept{
    pHead = rhs.pHead;
    rhs.pHead = NULL; 
}

//读入函数
void Big_Number::read(){
    string s;
    cin>>s;
    Node *p=pHead;
    int i =0;
    while(s[i]!='\0'){
        Node *q = new Node;
        q->data=s[i]-'0';
        p->next=q;
        q->pre=p;
        p=q;
        i++;
    }
    pTail=p;
    len=i; 

//显示 
void Big_Number::display()const{
    Node *p = pHead->next;
    for(int i=0;i<len;i++){
        cout<<p->data;
        p=p->next;
 }
    cout<<endl;
}
void Big_Number::display(int x)const{
    Node *p = pHead->next;
    for(int i=0;i<len;i++){
        cout<<p->data;
        p=p->next;
    }
}
//比较函数,大于返回1,等于返回0,小于返回-1;

int Big_Number::compare(const Big_Number &rhs)const{
    if(len < rhs.len) return -1;
    else if (len > rhs.len)  return 1;
    else{
        Node *p1=pHead->next;
        Node *p2=rhs.pHead->next;
        int i=1;
        while(i<len &&p1->data == p2->data){
            p1=p1->next;
            p2=p2->next;
            i++;
        }
        if(p1->data>p2->data) return 1;
        else if (p1->data<p2->data)  return -1;
        else return 0;
    }
    
}

//比较并显示   要改 
void Big_Number::Compare_And_Display(const Big_Number &rhs){
    display(1);
    if (compare(rhs)==1) cout<<'>';
    else if (compare(rhs)==0) cout<<'=';
    else cout<<'<';
    rhs.display();
}

Big_Number Big_Number::plus(const Big_Number &rhs){
    Big_Number result;
    Node *front = new Node;
    Node *s=front;    //为了和原来的链表具有一样的结构,最后释放这个空的尾结点; 
    Node *p=pTail;
    Node *q=rhs.pTail;
    int jw=0;
    for(int i=0;i<min(len,rhs.len);i++){
        Node *newnode = new Node;
        newnode->data=(p->data+q->data+jw)%10;
        jw=(p->data+q->data+jw)/10;
        newnode->next=front;
        front->pre=newnode;
        front=newnode;
        p=p->pre;
        q=q->pre;
    }
    if(len>min(len,rhs.len)){
        for (int i=0;i<len-min(len,rhs.len);i++){
            Node *newnode = new Node;
            newnode->data=(p->data+jw)%10;
            jw=(p->data+jw)/10;
            newnode->next=front;
            front->pre=newnode;
            front=newnode;
            p=p->pre;
        }
        if(jw>0){
            Node *newnode = new Node;
            newnode->data=jw;
            newnode->next=front;
            front->pre=newnode;
            front=newnode;
            result.pHead->next=front;
            front->pre= result.pHead;
            result.len=len+1;
        }
        else{
            result.pHead->next=front;
            front->pre= result.pHead;
            result.len=len;
        }
    }
    else if(rhs.len>min(len,rhs.len)){
        for (int i=0;i<rhs.len-min(len,rhs.len);i++){
            Node *newnode = new Node;
            newnode->data=(q->data+jw)%10;
            jw=(q->data+jw)/10;
            newnode->next=front;
            front->pre=newnode;
            front=newnode;
            q=q->pre;
        }
        if(jw>0){
            Node *newnode = new Node;
            newnode->data=jw;
            newnode->next=front;
            front->pre=newnode;
            front=newnode;
            result.pHead->next=front;
            front->pre= result.pHead;
            result.len=rhs.len+1;
        }
        else{
            result.pHead->next=front;
            front->pre= result.pHead;
            result.len=rhs.len;
        }
    }
    else{
        if(jw>0){
            Node *newnode = new Node;
            newnode->data=jw;
            newnode->next=front;
            front->pre=newnode;
            front=newnode;
            result.pHead->next=front;
            front->pre= result.pHead;
            result.len=rhs.len+1;
        }
        else{
            result.pHead->next=front;
            front->pre= result.pHead;
            result.len=rhs.len;
        }
    }
    result.pTail=s->pre;
    s->pre->next = NULL;
    delete s;
    return result;
}

Big_Number Big_Number::subtraction(const Big_Number &rhs){
    Big_Number result;
    Node *front = new Node;
    Node *s=front;    //为了和原来的链表具有一样的结构,最后释放这个空的尾结点; 
    Node *p=pTail;
    Node *q=rhs.pTail;
    if(compare(rhs)==2){
        for(int i=0;i<rhs.len;i++){
            Node *newnode = new Node;
            if(p->data<q->data){
                newnode->data = p->data - q->data+10;
                p->pre->data-=1; 
            }
            else {newnode->data=p->data - q->data;}
            p=p->pre;
            q=q->pre;
            front->pre=newnode;
            newnode->next=front;
            front=newnode;
        }
        for(int i=0;i<len-rhs.len;i++){
            Node *newnode = new Node;
            newnode->data=p->data;
            p=p->pre;
            front->pre=newnode;
            newnode->next=front;
            front=newnode;
        }
        //去除前导0
        result.len=len;
        Node *tmp=front;
        while(front->data==0){
            front=front->next;
            delete tmp;
            tmp = front;
            result.len--;
        }
    }
    else if(compare(rhs)==0){
        for(int i=0;i<len;i++){
            Node *newnode = new Node;
            if(q->data<p->data){
                newnode->data = q->data - p->data+10;
                q->pre->data-=1; 
            }
            else newnode->data=q->data-p->data;            
            p=p->pre;
            q=q->pre;
            front->pre=newnode;
            newnode->next=front;
            front=newnode;
        }
        for(int i=0;i<rhs.len-len;i++){
            Node *newnode = new Node;
            newnode->data=q->data;
            q=q->pre;
            front->pre=newnode;
            newnode->next=front;
            front=newnode;
        }
        //去除前导0
        result.len=rhs.len;
        Node *tmp=front;
        while(front->data==0){
            front=front->next;
            delete tmp;
            tmp = front;
            result.len--;
        }
    }
    else{
        Node *newnode = new Node;
        newnode->data=0;
        front->pre=newnode;
        newnode->next=front;
        front=newnode;
        result.len=1;
    }
    result.pHead->next=front;
    front->pre=result.pHead; 
    result.pTail=s->pre;
    s->pre->next=NULL;
    delete s;    
    return result;
}
int main(){
    Big_Number s1,s2,s3,s4,s5;
    s1.read();
    s2.read();
    s1.display();
    s2.display();
    s1.Compare_And_Display(s2);
    s3=s1.plus(s2);
    Big_Number s6(s1.plus(s2));
    s3.display();
    s6.display();
    s4=s1.subtraction(s2);
    s4.display();

    s5=s3.plus(s4);
    s5.display();
    return 0;
}

想问一下,文章的第七八行

 Big_Number  &operator = (Big_Number && rhs)noexcept;  
 Big_Number(Big_Number &&)noexcept;  //移动构造 

这两处编译出现问题,能否告知如何修改

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值