Динамически размещаемые члены данных в конструкторе классов

0

У меня возникают проблемы с попыткой выяснить, как бы я превратил элемент данных внутри класса (который первоначально был 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.

  • 0
    Double::Double() : val(new double) {...} И в equals , *val = d; , Вам также необходимо написать деструктор и написать (или подавить) конструктор копирования и оператор присваивания копии. Почему именно val должен быть указателем?
  • 0
    Поскольку на этой неделе рассказывается, как использовать DAM, а профессору нравится продолжать использовать лабораторные работы предыдущих недель, а val - единственный элемент данных в классе, это то, что мы превращаем в динамическую память, а не просто пишем новую программу для практики Это. Я могу указать, что знаю, как сделать это в функции или в основном, просто не знал, как создать это в классе. Классы продолжают пинать мою задницу ...
Показать ещё 3 комментария
Теги:

1 ответ

1
Лучший ответ

РЕШЕНИЕ К МОЕЙ ПРОБЛЕМЕ (Итак, проблема решена)

Решение было проще, чем я думал.

Double::Double() : val(new double)
{
......
}

просто нужно сделать это для каждого конструктора, а затем изменить любой экземпляр d.val или this-> val на * d.val или * this-> val.

Однако деконструкторы должны быть созданы, чтобы очистить память.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню