Форум программистов, компьютерный форум CyberForum.ru

Задача из Лафоре - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Графическое приложение http://www.cyberforum.ru/cpp-beginners/thread920921.html
Здравствуйте форумчане, возник вопрос на который хотелось бы получить вашу помощь, выполняю работу где требуется написать графическое приложение. Само приложение написано и работа почти доделана, но требуется дополнить работу теорией: что такое графическое приложение, классификация граф. приложений и т.д., но не могу найти литературу чтобы в ней была именно теория, в основном нахожу где...
C++ Работа с типами данных в массиве Всем доброго времени суток , помогите выяснить одну вещь. Есть у меня массив типа char. Вот к примеру {1f-21df } Каким образом можно преобразовать тип элементов массива в int, чтобы в нем можно было работать как с типом int. Заранее спс всем за понимание. Добавлено через 43 секунды Ой ну и конечно буковки то откинуть..... http://www.cyberforum.ru/cpp-beginners/thread920896.html
Наследование C++
Здравствуйте уважаемые форумчане!!! Вот написал код с наследованием, я бы хотел его усовершенствовать но не знаю как. Вот что именно я бы хотел добавить в этот код: Я написал ID ученика в этом случае 286. Я не могу сделать так чтобы Teacher (учитель) накричал (Cry) на этот ID(то есть на ученика который находится под ID = 286) и потом Dekan (декан) выгнал (kickout) бы этот 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 `&' ?)
C++ Полиморфизм, дружественные функции http://www.cyberforum.ru/cpp-beginners/thread920850.html
Всем привет! Имеется такая конструкция: class Base { public: Base(); Base(int n) {}; virtual ~Base() {};
C++ Шаблон функции не работает В чем я допустил ошибку? Почему шаблон функции не работает? #include <iostream> using namespace std; template < typename O > O max( O number1, O number2 ) { O maxValue = number1; if ( number 2 > maxValue ) maxValue = number2; подробнее

Показать сообщение отдельно
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
10.07.2013, 19:43     Задача из Лафоре
Для разъяснения действия наших доморощенных указателей мы смоделируем память компьютера с помощью массивов. Так как доступ к массивам всем понятен, то вы сможете увидеть, что реально происходит, когда мы используем для доступа к памяти указатели.
Мы будем использовать один массив типа 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 минуты
актуально
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru