Най-задълбочената програма по софтуерно инженерство в България
Loading...
iozzilina avatar iozzilina 22 Точки

Изваждане на поинтер на обект от масив по полета на обекта?

Колеги, кода тук е голямо мазало, за което се извинявам предварително. 

https://github.com/iozzilina/CppHW/blob/master/CashRegister.cpp

Сложих си масив от поинтери към SaleItem-ите, и мога спокойно да си вадя стойностите от полета. Как да препиша for each цикълът, (CheckInventory(string itemID) на пример) за да ми върне поинтера към обекта чиито ид ми трябва, за да мога да го подам на друга функция?

Благодаря предварително.

 

Тагове:
2
C++ Programming
asparuh.k avatar asparuh.k 16 Точки

В момента гледам кода и мислия че основния проблем е, че изплозваш масив от айтеми, в който искаш да вкараш айтеми, инстанциирани чрез new. new връща пойнтер към айтем, следователно масива трябва да е от пойнтери към айтеми, а не от айтеми. Промени го на SaleItem* inventory[], а вътре използвай new без * . Няма голяма логика да дереференсваш айтемите още при вкарването.

Още по-лошо. Така се получава лийкване на обекти, защото при дереферирането се копира айтема в масива (copy-constructor). Така получаваш два обекта, но адреса на първия не го пазиш никъде. Той седи в хийпа (не в стека) и после не може да освободиш паметта от него. Програмата се грижи за освобождаване на обекти само от стека.

След това за обхождане аз бих използвал като прост вариант for от индекс към масива (малко по-сложния вариант е с итератори).
При обхождането ако ти трябва пойнтера пиши inventory[i]. Ако ти трябва по стойност - *inventory[i] или inventory[i]->price

Не съм прочел внимателно целия код, но се надявам да съм дал някаква посока.

0
28/06/2016 21:08:15