У меня возникают проблемы с попыткой выяснить, как я превратил элемент данных внутри класса (который изначально был 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(): вал (новый двойной) { ...... }
просто должны сделать это для каждого конструктора, а затем изменить любой экземпляр d.val или это -> val в * d.val или * this-> val.
'Double :: Double(): val (новый двойной) {...}' И в 'equals',' * val = d; '. Вам также нужно будет написать деструктор и написать (или подавить) конструктор копирования и оператор присваивания копии. Почему именно «val» должен быть указателем? –
Поскольку на этой неделе используется DAM, и поскольку профессор любит продолжать использовать предыдущую лабораторию недели, а val является единственным членом данных в классе, это то, что мы превращаем в динамическую память вместо того, чтобы просто писать новую программу для практикуйте это. Я могу указать, что я знаю, как это сделать в функции или в основном, просто не знал, как ее создать в классе. Классы продолжают пинать мою задницу ... – Stephen
Я уже упоминал, что он даже не научил нас деконструкторам, тем не менее, код supposted никогда не выпускает память ... – Stephen