Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 8743
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 3083
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2591
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1703
Дата выхода:03.12.2011, 02:30
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:282 / 164
Вопросов / ответов:1 / 1

Консультация # 184593: Ещё раз здравствуйте, уважаемые эксперты! Прошу переработать программу в приложение с учётом 3его пункта задания. Сам класс работает, нужно только переработать его в соответствии с 3им пунктом. Также прошу объяснить назначение копирующего конструктора и оператора присваивания. Задание: 1. Разработать класс "перемешанная таблица" ...


Консультация # 184593:

Ещё раз здравствуйте, уважаемые эксперты!
Прошу переработать программу в приложение с учётом 3его пункта задания. Сам класс работает, нужно только переработать его в соответствии с 3им пунктом. Также прошу объяснить назначение копирующего конструктора и оператора присваивания.
Задание:
1. Разработать класс "перемешанная таблица" в соответствии со следующим заданием:
Состояние класса -
Таблица представляется в виде вектора (массива), состоящего из элементов. Элемент таблицы состоит из ключа (тип int), поля занятости (тип int) и информации (тип char[ ] фиксированной длины). Для описания элемента таблицы целесообразно использовать структуру. Память под массив выделяется статически, во время компиляции, и задается массивом фиксированного размера. Преобразование ключа в индекс выполняется функцией хеширования. Элементы перемешиваются методом сложения с константой.
Протокол класса -
Определяет возможности создания и инициализации экземпляров кла сса и правила их использования (методы класса).
Предусмотреть следующие возможности:
∙ создание экземпляров структуры (элемента таблицы) с инициализацией начальным состоянием по умолчанию;
∙ пустой конструктор для инициализации экземпляров и массивов экземпляров класса (таблицы) по умолчанию;
∙ создание экземпляров класса (таблицы) с инициализацией заданным количеством элементов из массива ключей и информации;
∙ ввод значения экземпляра структуры (элемента таблицы) из входного потока (с помощью перегруженного оператора >> );
∙ вывод таблицы в выходной поток (с помощью перегруженного оператора << );
∙ поиск элемента таблицы по ключу (с помощью перегруженного оператора ( ) );
∙ добавление элемента в таблицу (с помощью перегруженного оператора += );
∙ выборка информации из таблицы по заданному ключу (с помощью перегруженного оператора [ ] );
∙ удаление элемента из таблицы (с отметкой в поле занятости) по ключу (с помощью перегруженного оператора -= );
∙ чистка таблицы от “удаленных элементов” – реорганизация таблицы.
3. Повторить разработку класса при условии, что память под строку символов в элементе таблицы и массив структур необходимой длины выделяется динамически, во время выполнения программы (с помощью оператора new; память задается указателем на char в структуре и указателем на структуру в состоянии класса).
Дополнить интерфейс класса следующими возможностями:
∙ память под данные поля информации выделять динамически с помощью оператора new;
∙ создание экземпляра класса (таблицы) с его инициализацией другим экземпляром класса (копирующий конструктор) для элемента таблицы и таблицы;
∙ переопределение экземпляра класса (с помощью перегруженного оператора присваивания) для элемента таблицы и таблицы.

Дата отправки: 28.11.2011, 02:02
Вопрос задал: Посетитель - 383089 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Киселёва Алёна aka Verena (Профессор):

Здравствуйте, Посетитель - 383089!
Вот вариант с динамическим распределением памяти. Тут по-разному можно было сделать, мой вариант не самый оптимальный. При каждом расширении таблицы происходит перевыделение памяти и, в связи с изменением предельного размера таблицы, перехеширование. Функционал по освобождению памяти из-под строк и по их копированию наложен на саму структуру, описывающую элемент таблицы: я добавила туда конструктор копирования, оператор присваивания и деструктор. В остальном программа отличается только необходимостью работы с памятью, алгоритмически изменён только метод добавления элемента и метод сжатия (теперь он освобождает память из-под ненужных элементов).
Код в приложении, проверено в VS 2010.
Удачи!

Приложение:

Консультировал: Киселёва Алёна aka Verena (Профессор)
Дата отправки: 02.12.2011, 12:34
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное