![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
ammaximus |
![]()
Сообщение
#1
|
![]() Ночной волк ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Репутация: ![]() ![]() ![]() |
Проект по STL "Компьютерный магазин".
Программа должна обрабатывать базу данных компьютеров и комплектующих. Сортировать, выводить по параметрам, ввод,вывод... Объекты класса компьютер содержат ссылки на соответстувующее железо. Удаляешь компьютер - авто удаляется и его железо. Помогите правильно организовать классы, я немного запутался на этом этапе. Проблема в том как вообще все это организовать и в классах ввода вывода - они должны наследовать от стандартных и самостоятельно понимать ссылка на железо или на компьютер передана. Примерная схема задумки в приложении. //Preprocessor// Эскизы прикрепленных изображений ![]() -------------------- Не думай о белой обезьяне.
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Удаляешь компьютер - авто удаляется и его железо. Стоп. А вот с этого места - поподробнее... А может одинаковое железо использоваться в разных компьютерах, и что тогда делать при удалении компьютера? Удалять только когда никто больше не использует? Это был первый вопрос. Второй - вот это: class computer: public hardware{ делать не надо. У тебя получается адская смесь: и наследование, и агрегация одновременно, так нельзя, надо будет переделывать. Скорее всего. наследование здесь не надо (по крайней мере - не в таком виде), потому что компьютер содержит "память" и "звуковую карту", а значит, должен содержать в себе их классы... |
ammaximus |
![]()
Сообщение
#3
|
![]() Ночной волк ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Репутация: ![]() ![]() ![]() |
1. Железа имеется определенное количество, например 5 винтов; если компьютер купили - из каждой коробки вычитается по одной. Я вот подумал когда все заканчивается - не удалять полностью, а только присваивать 0, ведь могут и новую партию завезти.
2. Дело в том, что трехуровневое наследование - обязательное условие проекта. Его нужно оставить, хотя и не обязательно в таком виде. Если придумать что-то другое содержащее данное наследование - то отсюда его можно убрать. Просто я хочу разнообразить программу добавив возможность собирать компьютер из доступного железа. Смесь тут идея была такая - на основе содержащихся в hardware opermem; hardware soundcard; данных заполнять собственные параметры компьютера, т.е. из оперативной памяти берем memory из процессора freq. А при необходимости получать доступ ко всем комплектующим, например вывести их все. -------------------- Не думай о белой обезьяне.
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Ну, для начала, давай определимся со структурой классов:
#include <iostream>тебя устроит? В принципе, здесь наследование Hardware от Base притянуто за уши, но может быть полезно, скажем, если тебе понадобится работать не только с аппаратным, но и с программным обеспечением, тогда унаследуешь от Base еще и класс Software, а от него уже - разные виды программ, так что это имеет право на существование... Дальше - надо будет перегрузить операции >> и << для классов, которые будут работать с istream/ostream, а следовательно и с файлами (автоматически), ну, и добавить собственно, нужные характеристики в каждый класс, и меню... |
ammaximus |
![]()
Сообщение
#5
|
![]() Ночной волк ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот структура которая у меня получилась. Так будет работать?
Как правильно сделать класс ioconsole чтобы полиморфно принимал оба типа? Прикрепленные файлы ![]() -------------------- Не думай о белой обезьяне.
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
1) зачем в классе Hardware хранится memory? freq? Ты решил хранить конкретные данные в этом классе, что-ли? Тогда зачем тебе вся эта канитель с векторами составляющих? В том-то и суть, что Hardware - это абстрактный класс "какой-то там аппаратуры", нет у него никаких конкретных характеристик, какая частота может быть у жесткого диска, например? Все характеристики хранятся в конкретных типах. Частота и емкость - в Memory, емкость и скорость - в HDD, частота и количество ядер - в Processor... Что есть общего (присутствует у всех элементов аппаратного обеспечения) - это только цена и название (что такое termo - я не знаю).
2) ты опять за свое? Зачем тебе класс ioconsole, если потоки ввода вывода без тебя работают со стандартной консолью? Тебе достаточно описать глобальную функцию cls() для очистки консоли, это все, что надо (что надо сделать еще - я уже написал выше, повторять не буду)... 3) почему AddHard является методом ioconsole? Это что, функциональность консоли, добавлять в список аппаратных составляющих новый элемент? Нет, это функциональность Menu, не надо перекладывать это на консоль. В общем, я не буду больше отвечать, пока ты не научишься аргументированно сообщать, чем тебе не нравится то, что я привел выше. Вот почему я тебе все время пишу: 1) ... 2) ... 3) ..., а ты ни слова не говоря, опять приводишь что-то свое, и спрашиваешь, будет ли оно работать? А МНЕ-то зачем это надо, опять лазить по твоей программе, искать, чем это плохо, чем - хорошо, говорить что-то... Зачем? Чтобы опять, безо всяких причин и без объяснений ты привел свою реализацию и начал спрашивать, будет ли оно работать? Так зачем задаешь вопросы? Сделай и посмотри, будет, или нет... А потом я сделаю свой вариант, и сравним... P.S. У тебя уже не структура, а РЕАЛИЗАЦИЯ. Структура - это только классы, без конкретики... Меня не интересует на данном этапе, как именно ты очищаешь экран. Если тебе для этого надо 10 строк кода - то это только твои проблемы. Вообще это делается в 2 строки. Пока тебе надо только связать все в одно целое... |
ammaximus |
![]()
Сообщение
#7
|
![]() Ночной волк ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вопрос: как хранить всех потомков Hardware в одном векторе?
1. Должно же хоть что-то наследоваться от Hardware, иначе какой в нем смысл 2. Это специфика задания. Нужно создать собственные классы работающие с файлами и консолью. 3. Да, пожалуй 4. Как очистить экран? Сообщение отредактировано: ammaximus - 22.06.2009 6:15 -------------------- Не думай о белой обезьяне.
|
Lapp |
![]()
Сообщение
#8
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Я извиняюсь, что вмешиваюсь.. Очень понравилось:
1. Должно же хоть что-то наследоваться от Hardware, иначе какой в нем смысл Напомнило Козьму Пруткова (вольный пересказ):"Стоя на мосту и плюя в воду, следи за расходящимися кругами - иначе твое занятие будет бессмысленным." ammaximus, не подменяй поиск смысла еще большей бессмыслицей.. Тебе сказали: цена наследуется. Мало? ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата Это специфика задания. Нужно создать собственные классы работающие с файлами и консолью. Это ты знаешь, потому что свое задание ты не привел. Кроме всего прочего, вот это:class Base {будет работать и с файлом и с консолью. Причем будет работать лучше твоего класса, потому что мой вариант 1) кроссплатформенный, 2) работает на любом компиляторе, а в твоем будут проблемы не под Windows, и могут быть проблемы, если компилировать под Windows, но другим компилятором (кстати, с чем ты работаешь, ты тоже не сказал... У меня GCC + Debian, под Windows теперь не знаю, когда буду, так что WinAPI временно пролетает), ибо с API каждый компилятор почему-то работает по своему, а Стандарт есть Стандарт... Цитата Должно же хоть что-то наследоваться от Hardware Я тебе сказал, что смысла нет, сразу (просто уточнил, для чего это может оказаться полезным). Но ты же получил задание сделать три уровня наследования? Какой в этом смысл? Ну, кроме этого, цена и название могут там храниться...Цитата Как очистить экран? Вывести 25 переводов строки в поток std::coutЦитата как хранить всех потомков Hardware в одном векторе? Я тебе написал уже, храни не самих потомков, а указатели на них... |
ammaximus |
![]()
Сообщение
#10
|
![]() Ночной волк ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я не знаю как хранить потомков в базовом векторе, они преобразуются в базовый и доступ теряется, что делать?
vector<Hardware*> hSpisok; (у hdd появляется memory) -------------------- Не думай о белой обезьяне.
|
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 3:32 |