7 / 7 / 1
Регистрация: 22.12.2012
Сообщений: 173
|
|||||||||||
1 | |||||||||||
Описание чисто виртуальных методов, Абстрактные классы03.11.2013, 14:56. Показов 2434. Ответов 10
Метки нет (Все метки)
Здравствуйте.
Изучаю наследование, абстрактные классы. Возникло два вопроса: 1. Видел несколько примеров, вопрос - чем отличаются вот таких два описания чисто виртуальной функции. Нигде не нашел на что влияет этот const.
Вот класс "Коробка". box.h
0
|
03.11.2013, 14:56 | |
Ответы с готовыми решениями:
10
Определение чисто виртуальных функций в потомках Интерфейсы и абстрактные классы: обеспечить работу методов в конечном классе Зачем нужны абстрактные классы и абстрактные методы? Проблема в понимании ООП(абстрактные классы, классы интерфейсы) |
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
03.11.2013, 14:58 | 2 |
Он влияет на this. Этот квалификатор после имени функции указывает на то, что внутри функции не меняется состояние объекта, т.е.
1) она не может менять свойства класса 2) она не может вызывать неконстантные функции Разумеется, все это сделано для защиты и наглядности.
1
|
Неэпический
|
|
03.11.2013, 15:00 | 3 |
1
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
03.11.2013, 15:12 | 5 |
В многопоточной среде в С++11 это значит, что несколько потоков могут обращаться к const-функции без какой-либо внешней синхронизации.
0
|
7 / 7 / 1
Регистрация: 22.12.2012
Сообщений: 173
|
|||||||||||
03.11.2013, 15:15 [ТС] | 6 | ||||||||||
MrGluck, то есть создать новый класс который будет абстрактным, например Box1
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
03.11.2013, 15:17 | 7 |
Я бы Box1 назвал Box, а просто Box DeliveryBox, иначе непонятно кто кому является предком и почему.
Добавлено через 1 минуту И, кстати, указывая функцию без квалификатора const на конце, вы её не переопределяете, а перегружаете. И класс по прежнему останется абстрактным.
1
|
7 / 7 / 1
Регистрация: 22.12.2012
Сообщений: 173
|
|
03.11.2013, 15:22 [ТС] | 8 |
MrGluck, спасибо, понял
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
03.11.2013, 15:59 | 10 |
Это уже детали не интерфейса, а реализации. mutable при этом защищают либо мьютексом, либо делают атомарным - по ситуации.
0
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
03.11.2013, 16:13 | 11 |
Это вопрос того, какого стиля и каких правил придерживался разработчик класса. Одно только слово const в спецификации функции само по себе не даёт гарантий её потокобезопасности.
Точно так же, как нет гарантий, что деструктор класса, в котором есть виртуальные функции, сам является виртуальной функцией. Да, крайне желательно, чтобы он был виртуальным, да, нет причин не делать его таковым, и мы можем более-менее уверенно предполагать, что разработчик класса придерживался этого правила. Но твёрдых нерушимых гарантий нет.
0
|
03.11.2013, 16:13 | |
03.11.2013, 16:13 | |
Помогаю со студенческими работами здесь
11
Вызов виртуальных методов Использование виртуальных методов Наследование и переопределение виртуальных методов Программирование динамических и виртуальных методов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |