Я изучаю конструкторы и деструкторы в С++; Помоги мне понять мои ошибки, даже если они глупы...
ВОТ код, который я написал для выполнения сложения с использованием классов в С++; Это создает два слагаемых типа datatype num и использует конструктор sum() для выполнения суммы двух чисел; Однако, когда все шло хорошо, я наткнулся на создание конструктора копирования для num , (хотя и не обязательно, но все же для практики)... без динамического объекта класса sum невозможно все равно запустите код (без удаления конструктора копирования)... Помогите мне улучшить мой код и мои ошибки в приведенном ниже коде; Также я хочу знать, как использовать конструктор копирования в этой программе; проблема в том, что в деструкторе операция удаления выполняется несколько раз для одного и того же участка памяти (я полагаю)
Вот мой код
#include<iostream>
#include<new>
using namespace std;
class num
{
public:
int *a;
num(int x)
{
try
{
a=new int;
}
catch(bad_alloc xa)
{
cout<<"1";
exit(1);
}
*a=x;
}
num(){ }
num(const num &ob)
{
try
{
a=new int;
}
catch(bad_alloc xa)
{
cout<<"1''";
exit(2);
}
*a=*(ob.a);
}
~num()
{
cout<<"Destruct!!!";
delete a;
}
};
class sum:public num
{
public:
int add;
sum(num n1,num n2)
{
add=*(n1.a)+*(n2.a);
}
int getsum()
{
return add;
}
};
int main()
{
num x=58;
num y=82;
sum *s=new sum(x,y);
cout<<s->getsum();
delete s;
return 0;
}
num(){ }
это крайне неправильно. Вы не можете оставить элемент данных указателя неинициализированным. - person n. 1.8e9-where's-my-share m.   schedule 05.07.2018sum
нужно наследовать отnum
?sum(num n1,num n2)
предпочитают вместо этого братьconst num&
.sum(const num& n1, const num& n2)
- person Wander3r   schedule 05.07.2018num
содержалint *
, а не толькоint
. Или чтобы он существовал вообще. Просто оперируйтеint
s - person Caleth   schedule 05.07.2018