2014-11-10 3 views
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(): вал (новый двойной) { ...... }

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

+0

'Double :: Double(): val (новый двойной) {...}' И в 'equals',' * val = d; '. Вам также нужно будет написать деструктор и написать (или подавить) конструктор копирования и оператор присваивания копии. Почему именно «val» должен быть указателем? –

+0

Поскольку на этой неделе используется DAM, и поскольку профессор любит продолжать использовать предыдущую лабораторию недели, а val является единственным членом данных в классе, это то, что мы превращаем в динамическую память вместо того, чтобы просто писать новую программу для практикуйте это. Я могу указать, что я знаю, как это сделать в функции или в основном, просто не знал, как ее создать в классе. Классы продолжают пинать мою задницу ... – Stephen

+0

Я уже упоминал, что он даже не научил нас деконструкторам, тем не менее, код supposted никогда не выпускает память ... – Stephen

ответ

1

решение моей проблемы (Таким образом, проблема решена)

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

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

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

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

Смежные вопросы