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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.