![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 13.01.2009
Сообщений: 10
|
![]()
Помогите с оптимизированием кода
Задача создать класс динамический класс book,в нем дин массив авторы (предусмотреть возможность ввода Фио автора кол-во книг и года рождения). И создать класс каталог (в условии не оговорено конкретно где). Ввод и вывод данных каталога должен происходить через дружественные функции (логически массив автор и массив каталог как-то связывать друг с другом НЕ нужно) вот что накодил я ,но чувствую, что здесь можно избежать повторения одинаковых элементов Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,068
|
![]()
Оптимизировать тут нечего. Могу только сказать, что неправильно спроектированы классы. Класс book должен по логике отвечать только за хранение данных, но никак не за их ввод.
Далее метод string add_author(); возвращает объект класса string по значению, т.е. в строке return(Author[1][1]); вызывается конструктор копирования и создается новый объект. Логичнее возвращать ссылку на уже имеющуюся строку. Так как уже используете STL, для хранения авторов не разумнее ли использовать vector и не заморачиваться с выделением памяти? Далее вижу в конструкторе new, в createAuthors тоже происходит выделение памяти, а где деструктор, который все это удаляет? В string book: ![]() Вот на первый взгляд вроде бы и все ЗЫ. Еще вот этому: Код:
И еще приучайтесь использовать const как для параметров, так и для методов. Последний раз редактировалось pu4koff; 25.03.2009 в 14:40. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 13.01.2009
Сообщений: 10
|
![]()
[QUOTE=pu4koff;227557]Далее метод string add_author(); возвращает объект класса string по значению, т.е. в строке return(Author[1][1]); вызывается конструктор копирования и создается новый объект. Логичнее возвращать ссылку на уже имеющуюся строку.[QUOTE]
Вот это не совсем понял можно поподробнее? |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,068
|
![]()
Сейчас у вас возвращается новый объект.
вызов 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 |