- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
//
Fraction Fraction::operator +(Fraction &ob)
{
int f;int d; int c; int k; int l; int z;
char*p; char*x;
p=new char; x=new char;
Fraction tempOb;
if(strcmp(znam, ob.znam)==0)
{
f=atoi(tempOb.chisl);
d=atoi(ob.chisl);
c=atoi(chisl);
f=d+c;
k=atoi(tempOb.znam);
l=atoi(znam);
k=l;
p=itoa(f,p,10);
x=itoa(k,x,10);
strcpy(tempOb.chisl,p);
strcpy(tempOb.znam,x);
}
else
{
f=atoi(tempOb.chisl);
d=atoi(ob.chisl);
c=atoi(chisl);
k=atoi(ob.znam);
l=atoi(znam);
f=c*k+d*l;
z=atoi(tempOb.znam);
z=l*k;
p=itoa(f,p,10);
x=itoa(z,x,10);
strcpy(tempOb.chisl,p);
strcpy(tempOb.znam,x);
}
tempOb.operator ~();
return tempOb;
}
//
Нашел баг с переполнением, если вводишь слишком большие числа. Пытаюсь сделать через char. Работает. Но такие фрагменты кода убивают. Реально сделать легче, а еще лучше если сразу через int?
жесть. это работает?
100% не испортит. ни один серьёзный аллокатор на 32битной архитектуре не выделит ровно один байт. будет выравнивание хотя бы до четырёх.
хотя сиплюс может завести мемпул для чаров, чтобы лишний раз не трогать общую кучу... кто знает... там выравнивания не нужны...
единственное почему оно работает, это то что гранулярность new под виндой в mscrt 8 байт...
либо передавать буфер размером больше 12 байт (p=new char[16]), любой инт влезет в такой буфер... либо в крайнем случае можно использовать snprintf...