Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Графическое приложение https://www.cyberforum.ru/ cpp-beginners/ thread920921.html
Здравствуйте форумчане, возник вопрос на который хотелось бы получить вашу помощь, выполняю работу где требуется написать графическое приложение. Само приложение написано и работа почти доделана, но...
C++ Работа с типами данных в массиве
Всем доброго времени суток , помогите выяснить одну вещь. Есть у меня массив типа char. Вот к примеру {1f-21df } Каким образом можно преобразовать тип элементов массива в int, чтобы в нем можно...
C++ Наследование https://www.cyberforum.ru/ cpp-beginners/ thread920867.html
Здравствуйте уважаемые форумчане!!! Вот написал код с наследованием, я бы хотел его усовершенствовать но не знаю как. Вот что именно я бы хотел добавить в этот код: Я написал ID ученика в этом случае...
C++ Ошибка invalid use of member Вот код. if (variety == a1.seta cout << a1.seta; else cout << "This sort is not.Try again." << endl; В ошибке показывает вот это: invalid use of member (did you forget the `&' ?) https://www.cyberforum.ru/ cpp-beginners/ thread920862.html
C++ Полиморфизм, дружественные функции
Всем привет! Имеется такая конструкция: class Base { public: Base(); Base(int n) {}; virtual ~Base() {};
C++ Шаблон функции не работает https://www.cyberforum.ru/ cpp-beginners/ thread920843.html
В чем я допустил ошибку? Почему шаблон функции не работает? #include <iostream> using namespace std; template < typename O > O max( O number1, O number2 ) { O maxValue = number1; if (...
C++ Прикол с указателями взял пример с http://www.cplusplus.com/reference/algorithm/find/, немного поэксперементировал и наткнулся на необъяснимый факт) Смотрим: #include <iostream> // std::cout #include <algorithm> ... https://www.cyberforum.ru/ cpp-beginners/ thread920838.html C++ Нужна помошь:выделение в тексте слов с заданной буквой
Необходима помощь в реализации одной задачи:Нужно вывести текст на экран из файла, и по нажатию произвольной клавиши поочередно выделяет в тексте слова с заданной буквой (вводится с клавиатуры);...
C++ Быстрый поиск совершенных чисел https://www.cyberforum.ru/ cpp-beginners/ thread920805.html
Чтобы легко можно было отсылать вопрошающих по этому вопросу, создаю новую тему. Напомню, что Совершенное число — натуральное число, равное сумме всех своих собственных делителей (т. е. всех...
C++ bool функция, нужен разбор https://www.cyberforum.ru/ cpp-beginners/ thread920795.html
bool not_url_char(char c) { static const string url_char="~,./?!@#$%^&*()_-+=;'"; return !(isalnum(c)||find(url_char.begin(), url_char.end(), c)!=url_char.end()); } Данная функция должна...
Массив: Как скопировать двумерный массив в другой массив? C++
Как скопировать двумерный массив в другой массив?
C++ Добавить в класс возможность вычисления значенний с плавающей точкой https://www.cyberforum.ru/ cpp-beginners/ thread920763.html
Есть код программи , надо добавить в него возможность считать не только целие числа, а й реальние. Как разобрать строку ? Чтоб получились числа типа float #include <vcl> #include <conio> #include...
70 / 70 / 13
Регистрация: 13.05.2012
Сообщений: 130
0

Задача из Лафоре - C++ - Ответ 4827950

10.07.2013, 19:43. Показов 1330. Ответов 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, которое располагалось по нужному нам адресу.
C++
1
2
3
4
Float& ptrFloat::operator*()
{
    return fmemory[ pmemory[addr] ];
}
Таким образом мы моделируем действия операции разыменования (*). Заметим, что вам нужно возвращаться из этой функции по ссылке, чтобы можно было использовать * слева от знака равно.
Классы Float и ptrFloat похожи, но класс Float хранит данные типа float в массиве, представляющем собою память, а класс ptrFloat хранит поля типа int (являющееся у нас указателями, но на самом деле индексами массива) в другом массиве, который тоже представляет собой память.
Это типичное использование этих классов в функции main():
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Float var1=1.234;
Float var2=5.326;
 
ptrFloat ptr1=&var1;
ptrFloat ptr2=&var2;
 
cout<<*ptr1=<<*ptr1<<endl;
cout<<*ptr2=<<*ptr2<<endl ;
 
*ptr1=7.123 ;
*ptr2=8.456 ;
 
cout<<*ptr1=<<*ptr1<<endl;
cout<<*ptr2=<<*ptr2<<endl ;
Заметим, что за исключением других имен типов переменных, это выглядит так же, как действия с настоящими переменными. Далее результат работы программы:
C++
1
2
3
4
5
*ptr1=1.234 ;
*ptr2=5.678 ;
 
*ptr1=7.123 ;
*ptr2=8.456 ;
Добавлено через 3 часа 2 минуты
актуально

Вернуться к обсуждению:
Задача из Лафоре C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2013, 19:43
Готовые ответы и решения:

Задача из Лафоре
есть задачка из Лафоре -&gt; Модифицируйте класс bMoney из упражнения 12 главы 7 «Массивы и...

Не компилируется задача из Лафоре
Помогите пожалуйста разбораться почему компилятор ругается: 1&gt;L.obj : error LNK2019: unresolved...

Очередь (задача из Лафоре)
Задача 9 из Лафоре: Надо написать класс queue, имеющий два метода: put() для помещения элемента в...

Лафоре. Глава 11. Задача 2
Решал задачку из учебника - Лафоре. Глава 11. Задача 2. Вот код #include &lt;iostream&gt; #include...

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2013, 19:43
Помогаю со студенческими работами здесь

Лафоре задача по классам
Задача из книги лафоре по классам №7: нужно написать программу используя классы для ввода и вывода...

Задача по книге Р. Лафоре
Пример по книге Лафоре... (Система Windows 10/64bit.) Я знаю что на форуме есть решения но я хочу...

Задача 7 главы 7 из книги Р. Лафоре. Строки
Добрый день! Недавно начал изучать С++ по, наверное, уже всем поднадоевшему, учебнику Роберта...

Лафоре,задача про денежный тип
Вот задачка: Одним из недостатков C++ является отсутствие для бизнес-программ встроенного типа для...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru