70 / 70 / 13
Регистрация: 13.05.2012
Сообщений: 130
|
||||||||||||||||
1 | ||||||||||||||||
Задача из Лафоре10.07.2013, 19:43. Показов 1266. Ответов 2
Метки нет Все метки)
(
Для разъяснения действия наших доморощенных указателей мы смоделируем память компьютера с помощью массивов. Так как доступ к массивам всем понятен, то вы сможете увидеть, что реально происходит, когда мы используем для доступа к памяти указатели.
Мы будем использовать один массив типа char для хранения всех типов переменных. Именно так устроена память компьютера: массив байтов, каждый из которых имеет адрес. Однако С++ не позволит нам хранить данные типа float или int в массиве типа char обычным путем (мы можем использовать объединения, но это другая история). Поэтому мы создадим симулятор памяти, используя отдельный массив для каждого типа данных, которые мы хотим сохранить. В этом упражнении мы ограничимся одним типом float, и нам понадобится массив для него. Назовем этот массив fmemory. Однако значения указателей (адреса) тоже хранятся в памяти, и нам понадобится еще один массив для их хранения. Так как в качестве модели адресов мы используем индексы массива, то нам потребуется массив типа int, назовем его pmemory, для хранения этих индексов. Индекс массива fmemory (назовем его fmem_top) показывает на следующее по очереди доступное место, где можно сохранить значение типа float. У нас есть еще похожий индекс массива pmemory(назовем его pmem_top). Не волнуйтесь о том, что наша “память” может закончиться. Мы предполагаем , что эти массивы достаточно большие, чтобы хранить все, что мы захотим, и нам не надо заботиться об управлении памятью. Создадим класс Float, который мы будем использовать для моделирования чисел типа float, которые будет храниться в fmemory вместо настоящей памяти. Класс Float содержит поле, значением которого является индекс массива fmemory, хранящего значения типа float. Назовем это поле addr. В классе также должны быть два метода. Первый- это конструктор, имеющий один аргумент типа float для инициализации значения. Конструктор помещает значение аргумента в элемент массива fmemory, на который указывает указатель fmem_top, а затем записывает значение fmem_top в массив addr. Второй метод является перегружаемой операцией &. Он просто возвращает значение указателя (индекса типа int ) в addr. Создадим второй класс ptrFloat. Объект этого класса содержит адрес(индекс) в pmemory. Метод класса инициализирует этот “указатель” значеним типа int. Второй метод перегружает операцию * (операция разыменования). Его действие более сложны. Он получает адрес из массива pmemory, в котором хранится адреса. Затем полученный адрес используется как индекс массива fmemory для получения значения типа float, которое располагалось по нужному нам адресу.
Классы Float и ptrFloat похожи, но класс Float хранит данные типа float в массиве, представляющем собою память, а класс ptrFloat хранит поля типа int (являющееся у нас указателями, но на самом деле индексами массива) в другом массиве, который тоже представляет собой память. Это типичное использование этих классов в функции main():
актуально
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
10.07.2013, 19:43 | |
Ответы с готовыми решениями:
2
Задача из Лафоре Не компилируется задача из Лафоре Очередь (задача из Лафоре) Лафоре. Глава 11. Задача 2 |
Ferz_
|
||||||
25.07.2013, 01:05 | 2 | |||||
|
Каратель
![]() |
|
25.07.2013, 01:46 | 3 |
0
|
25.07.2013, 01:46 | |
Помогаю со студенческими работами здесь
3
Лафоре задача по классам
Задача 7 главы 7 из книги Р. Лафоре. Строки Лафоре,задача про денежный тип Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |