萌新问一个关于class 类的问题
  • 板块学术版
  • 楼主hanzhongtlx
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/1/16 09:40
  • 上次更新2023/10/24 04:03:02
查看原帖
萌新问一个关于class 类的问题
184500
hanzhongtlx楼主2023/1/16 09:40

我在尝试用class来实现高精度加法,在没有写析构函数~Number() 时可以输出正确答案,在写了析构函数后就会随机输出,代码以12+1=13作为样例,求大佬的帮助/kk

#include"iostream"
#include"cstring"
#include"cstdio"
#include"cmath"
using namespace std;

#define ll long long 

char zero[]="00000000000000000000";

class Number
{ 
public:
	int len;
	int *str;
	Number(char *s)
	{
		len=strlen(s);
		str=new int[len];
		for(int i=0;i<len;i++) str[i]=s[len-i-1]-'0';
	}
	friend Number operator +(const Number &n,const Number &m)
	{
		Number t(zero);
		int lenn=max(n.len,m.len);
		for(int i=0;i<lenn;i++)
		{
			if(i<n.len) t.str[i]+=n.str[i];
			if(i<m.len) t.str[i]+=m.str[i];
		}
		t.len=lenn;
		for(int i=0;i<lenn;i++)
		{
			t.str[i+1]+=t.str[i]/10;
			t.str[i]%=10;
		}
		if(t.str[lenn]) t.len++;
		return t;
	}
	friend void print(const Number &number)
	{
		for(int i=0;i<number.len;i++) cout<<number.str[number.len-i-1];
		puts("");	
	}
   //下面这里注释掉就会输出
   //求助怎么样写才能保证可以析构释放空间并且保证正确性
	~Number(){delete[] str,str=NULL;}
};

int main()
{
	Number n1("12"),n2("1");
	Number d("0");
	d=n1+n2;
	print(d);
	return 0;
} 
2023/1/16 09:40
加载中...