3 / 3 / 0
Регистрация: 24.11.2014
Сообщений: 40
|
||||||
1 | ||||||
Посоветуйте, как прорефакторить код05.05.2015, 17:28. Показов 1093. Ответов 5
Метки нет (Все метки)
Нужно создать абстрактный класс.
ОТ него 3 дочерные - фигуры - треугольник, прямоугольник и элипс. нужно ввести N точек (N>=3) и вывести площадь и принадлежность введеных точек для каждой фигуры потом отсортировать в по возрастанию кол. точек, пренадлежащих фигурам. Нужно оптимизировать его мне он очень не нравиться , опыта сильного не имею , недавно начал учить плюсы. Нужно ди отдельно создавать хедер на классы и реализации методов ?? Посоветуйте, как сделать код умнее и более правильным
Нужно работать динамически.
0
|
05.05.2015, 17:28 | |
Ответы с готовыми решениями:
5
Как грамотно прорефакторить? Посоветуйте, как найти мёртвый код Посоветуйте как улучшить код Посоветуйте, как оптимизировать код! |
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||||||||||||
05.05.2015, 18:06 | 2 | |||||||||||||||
В общем случае - да. Для целей демонстрации - лучше наоборот всё иметь в одном файле. Так проще проверять код.
Замечания по коду: 1. Для IFlatFigure нужен пустой виртуальный деструктор. А явный конструктор не нужен вовсе (в данной интерпретации). 2. Функции, не изменяющие логическое состояние объекта, должны быть объявлены константными. Например:
4. Не следует без надобности мешать сишный и плюсовый код. В частности, вместо fabs() следует использовать std::abs(). 5. Рекомендуется явно указывать на виртуальность функции в производном классе (см. пример далее в п.6). 6. Если поддерживается Стандарт C++11 рекомендуется в виртуальные функции в производных классах снабжать спецификатором override. Например (с учетом п.2):
0
|
3 / 3 / 0
Регистрация: 24.11.2014
Сообщений: 40
|
|
05.05.2015, 18:36 [ТС] | 3 |
Tulosba, спасибо огромное)
Еще вопросы 1. Зачем деструктор, когда он пустой? прошу обьяснить, заче делать это явно? так просто економиться пам'ять , но теряеться логичность. Вот не знаю, что приоритетней. я пробовал и dekete[]Temp и delete Temp - никак не получлось. Это через деструктор ????
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||||||||||||
05.05.2015, 19:04 | 4 | |||||||||||||||
Сообщение было отмечено Fenix1123581321 как решение
Решение
Ключевое слово тут - "виртуальный". Ты создаешь объект производного класса и записываешь его адрес в указатель на базовый класс (строки 175-177). Дальше используешь функции, объявленные в базовом классе виртуальными (Print, Area и пр.). Пока всё работает хорошо. Но когда возникнет необходимость удалить созданные объекты (т.е. вызвать delete для каждого), будет вызван деструктор только базового класса (тот класс, который указан в строке 174). Это наиболее вероятный исход. Но по Стандарту вызов delete на объекте производного класса через указатель на базовый при отсутствии виртуального деструктора в базовом классе приводит вовсе к непредсказуемым последствиям (Undefined behaviour).
Для лучшего понимания, можно провести аналогию с функциями: если функция не виртуальная - вызывается тот вариант, который связан со статическим типом указателя, а если виртуальная - то с динамическим. override следует использовать для лучшего контроля за переопределенными виртуальными функциями. Пример:
При добавлении override (т.е. явное указание компилятору, что переопределяется виртуальная функция из базового класса) компилятор ругнется соответствующей ошибкой:
1
|
3 / 3 / 0
Регистрация: 24.11.2014
Сообщений: 40
|
|
05.05.2015, 19:55 [ТС] | 5 |
Tulosba, уже вас своею тупостю мучать не буду, огромное спасибо за помощь))
Единственное, что хочу спросить : По какой литературе вы учились ?? Посоветуйте, пожалуйста, наиболее понятную и обьемную литературу. Я очень плаваю у битах, битовых представлениях чисел, битовых операциях. За что сначала взяться, чтобы структурно и последовательно изуччить косяки. И самое главное, могу ли я вам иногда задавать вопросы, с которыми у меня будут серьезные проблемы ?? П.С. , я сам не русский, поэтому, пускай мои глупые ошыбки никак не повлияют на ваше впечатление обо мне.
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
05.05.2015, 20:38 | 6 |
Список литературы можно посмотреть тут.
Безусловно. Для этого форум и существует.
0
|
05.05.2015, 20:38 | |
05.05.2015, 20:38 | |
Помогаю со студенческими работами здесь
6
Посоветуйте как упростить код? :) Посоветуйте, как улучшить код? Посоветуйте как упростить код Посоветуйте как оптимизировать данный код Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |