|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.03.2009, 14:20 | #1 |
Пользователь
Регистрация: 13.01.2009
Сообщений: 10
|
Помогите с оптимизированием кода
Помогите с оптимизированием кода
Задача создать класс динамический класс book,в нем дин массив авторы (предусмотреть возможность ввода Фио автора кол-во книг и года рождения). И создать класс каталог (в условии не оговорено конкретно где). Ввод и вывод данных каталога должен происходить через дружественные функции (логически массив автор и массив каталог как-то связывать друг с другом НЕ нужно) вот что накодил я ,но чувствую, что здесь можно избежать повторения одинаковых элементов Код:
|
25.03.2009, 14:35 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Оптимизировать тут нечего. Могу только сказать, что неправильно спроектированы классы. Класс book должен по логике отвечать только за хранение данных, но никак не за их ввод.
Далее метод string add_author(); возвращает объект класса string по значению, т.е. в строке return(Author[1][1]); вызывается конструктор копирования и создается новый объект. Логичнее возвращать ссылку на уже имеющуюся строку. Так как уже используете STL, для хранения авторов не разумнее ли использовать vector и не заморачиваться с выделением памяти? Далее вижу в конструкторе new, в createAuthors тоже происходит выделение памяти, а где деструктор, который все это удаляет? В string book:el_author() сместили всех авторов и затерли указатель на удаляемого, но кто этого автора удалит из памяти? Не будет ли у нас в конце 2 одинаковых автора? Вот на первый взгляд вроде бы и все ЗЫ. Еще вот этому: Код:
И еще приучайтесь использовать const как для параметров, так и для методов. Последний раз редактировалось pu4koff; 25.03.2009 в 14:40. |
25.03.2009, 17:22 | #3 |
Пользователь
Регистрация: 13.01.2009
Сообщений: 10
|
[QUOTE=pu4koff;227557]Далее метод string add_author(); возвращает объект класса string по значению, т.е. в строке return(Author[1][1]); вызывается конструктор копирования и создается новый объект. Логичнее возвращать ссылку на уже имеющуюся строку.[QUOTE]
Вот это не совсем понял можно поподробнее? |
25.03.2009, 17:37 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Сейчас у вас возвращается новый объект.
вызов return(Author[1][1]) превращается в нечто такое: Код:
string& add_author() или string* add_author() как больше нравится. Вообще не знаю, может вас и такое поведение устраивает, как сейчас |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите в написании кода... | sobol556 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 23.03.2009 19:49 |
Помогите, пожалуйста, реализовать часть кода | Horknee | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 01.12.2008 23:30 |
помогите понять кусок кода | Arteom | БД в Delphi | 7 | 31.08.2007 08:51 |
Выдернуть куски кода из html-кода | trafbite | Помощь студентам | 7 | 18.08.2007 13:51 |