05.09.2016 Views

Стефан Р. - С++ Для чайников

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Возв[гшн к tct/че<br />

Проблемы, возникающие при работе с указателями на простые переменные, распространяются<br />

и на указатели на объекты. В частности, необходимо гарантировать,<br />

что указатель ссылается на существующий корректный объект. Так, нельзя возвращать<br />

указатель на локально определенный объект, как это сделано в данном примере:<br />

MyClass* myFunct)<br />

{<br />

//эта функция не будет работать правильно<br />

MyClass me;<br />

MyClass* pMC = &mc;<br />

return pMC;<br />

}<br />

После возврата из myFunc () объект тс выходит из области видимости, а значит,<br />

указатель, который возвращает myFunc (), указывает на несуществующий объект.<br />

Использование кучи позволяет решить эту проблему:<br />

MyClass* myFunc(}<br />

{"<br />

MyClc.ss* pMC = new MyClass;<br />

return pMC;<br />

}<br />

С помощью кучи можно выделять память для объектов в самых разнообразных<br />

ситуациях.<br />

использование связанных списков<br />

Связанный список является второй по распространенности структурой после массива.<br />

Основным преимуществом связанного списка служит отсутствие необходимости<br />

задавать фиксированный размер на этапе компиляции: связанный список может<br />

уменьшаться и увеличиваться в зависимости от потребностей программы. Цена такой<br />

гибкости — сложность обращения, поскольку использовать элементы связанного списка<br />

гораздо сложнее, чем элементы массива.<br />

Массив<br />

Массив очень удобен для хранения набора объектов, так как позволяет просто<br />

и быстро обратиться к отдельным его элементам:<br />

MyClass :пс[100];<br />

гас [п 3 ;<br />

//выделяем место под 100 элементов<br />

/ /обратиться к (п+1) -му элементу списка<br />

Однако у массивов есть много весомых недостатков.<br />

Основным недостатком массивов является фиксированность их длины. Можно<br />

спрогнозировать количество элементов в массиве, необходимое для работы программы,<br />

однако, будучи однажды определенным, это количество не может быть изменено.<br />

void fnfint nSize)<br />

(<br />

//создаем массив из п объектов<br />

//MyClass<br />

MyClass* pMC = new MyClass[n];<br />

//теперь длина массива не может<br />

Глава 15. Создание указателей на объекты 165

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!