У меня возникают проблемы с попыткой выяснить, как бы я превратил элемент данных внутри класса (который первоначально был int) в указатель на динамически выделенную часть памяти.
Я знаю, что я могу делать int * num = new int при нормальных обстоятельствах, но как бы инициализировать его в классе?
Мой учитель сделал удивительную работу, не объясняя это самым ужасным способом в классе -_.
Это пример класса и конструктора.
Заголовок
class Double
{
private:
double *val;
.Cpp
Double::Double()
{
this->equals(0.0);
}
Double::Double(const Double &d)
{
this->equals(d.val);
}
Double::Double(const double &d)
{
this->equals(d);
}
Double::Double(const Interger &i)
{
this->equals(i.toInt());
}
//New overloaded constructor using strings
Double::Double(const string &s)
{
this->equals(s);
}
void Double::equals(const double &d)
{
this->val = d;
}
Все, что я знаю, это то, что теперь я должен сделать элемент данных указателем, но я понятия не имею, как создать новую память. Я попытался посмотреть это, но я не смог найти пример того, как делать DAM внутри реального класса для его памяти и конструктора.
EDIT Решение было проще, чем я думал.
Double :: Double(): val (новый двойной) {......}
просто нужно сделать это для каждого конструктора, а затем изменить любой экземпляр d.val или this-> val на * d.val или * this-> val.
РЕШЕНИЕ К МОЕЙ ПРОБЛЕМЕ (Итак, проблема решена)
Решение было проще, чем я думал.
Double::Double() : val(new double)
{
......
}
просто нужно сделать это для каждого конструктора, а затем изменить любой экземпляр d.val или this-> val на * d.val или * this-> val.
Однако деконструкторы должны быть созданы, чтобы очистить память.
Double::Double() : val(new double) {...}
И вequals
,*val = d;
, Вам также необходимо написать деструктор и написать (или подавить) конструктор копирования и оператор присваивания копии. Почему именноval
должен быть указателем?