11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
|
|||||||||||
1 | |||||||||||
Виртуальный абстрактный класс23.12.2016, 15:43. Просмотров 2933. Ответов 14
Метки нет Все метки)
(
Надеюсь мой вопрос будет не глупым. Есть класс исключений в пространстве имен std
У него есть метод what Я создаю свой базовый класс исключений, абстрактный. В нем переопределяю функцию what.
Тут нужно наследовать виртуально?
0
|
|
23.12.2016, 15:43 | |
Виртуальный методы, абстрактный класс. Абстрактный класс. Виртуальный метод, который возвращает T- тип Абстрактный класс «Клиент банка», имеющий виртуальный метод для вывода данных о клиенте Класс: Разработать абстрактный класс класс Point для задания координаты...
__________________
14
Помогаю в написании курсовых работ и дипломов здесь. Записывайтесь на профессиональные курсы C++ разработчиков |
|
Форумчанин
![]() ![]() 8164 / 5012 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
|
|
23.12.2016, 15:48 | 2 |
Он не абстрактный, у него нет чисто виртуальных функций.
Зачем? Виртуальное наследование нужно только для решения проблемы с ромбом при множественном наследовании.
0
|
![]() 8411 / 3946 / 864
Регистрация: 15.11.2014
Сообщений: 8,894
|
|
23.12.2016, 15:48 | 3 |
0
|
Форумчанин
![]() ![]() 8164 / 5012 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
|
|
23.12.2016, 15:52 | 4 |
Можно, кстати, добавить реализацию чисто виртуальной функции как вариант по умолчанию.
То есть мы будем требовать явного переопределения виртуальной функции (чтобы создать объект не абстрактного класса), но при этом наследники могут внутри метода вызывать реализацию для этой функции базового класса.
0
|
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
|
|
23.12.2016, 15:57 [ТС] | 5 |
дык.....
Это вопрос с абстрактностью думаю закрыт. Отсылаю вас в гугл и в книги( тотже Страусттруп) Вопрос у меня звучал так. std::exception - вроде не абстрактный класс. У него своя реализация метода what, я так думаю. Я унаследовал его в доругом классе. Потом еще в одном. Какую реализацию вызовет наследник?? И почему? Даже если уйти от конкретного случая... есть класс, наследую его, переопределяю метотд. Наследую этот новый класс. Чья реализация метода вывозиться от наследника этих классов?
0
|
Форумчанин
![]() ![]() 8164 / 5012 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
|
|||||||||||
23.12.2016, 16:11 | 6 | ||||||||||
На этом моменте (чисто виртуальные функции тоже могут иметь свою реализацию), у некоторых адептов начинается диссонанс. Однако это довольно удобный приём.
С того самого же места: Если методы виртуальные, то выберется последний переопределённый вариант виртуальной функции (если не указывать область видимости явно). В этом и суть виртуальных функций. Добавлено через 5 минут Создание объекта базового класса с конструктором в protected:
0
|
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
|
|
23.12.2016, 16:15 [ТС] | 7 |
Страуструп:
в с++ 11 это через delete вроде делается...тут я кидаю в протект. Вот и абстрактный класс. Я просто в дочерних классах из -за экономии кода не хотел переопределять what. Если я бы переопределил, я бы и вопрос не задал. Вопрос в том, могу ли я наделить абстрактный класс реализацией функции и унаследовать ее? Если да, тогда чью релазацию унаследует класс потомок ![]() А ваш код не отвечает на вопрос. Он дает реализацию задачи переопределения методов.. Пока что я просто переопределил в классах метод, но мне интересен такой случай наследования. Как его граммотно реализуют..?
0
|
Форумчанин
![]() ![]() 8164 / 5012 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
|
|
23.12.2016, 16:21 | 8 |
У меня как раз в примере абстрактный класс имеет реализацию чисто виртуальной функции.
Добавлено через 1 минуту Но вы же сами говорите о наследовании. Такой класс просто не позволит создать потомков.
0
|
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
|
|||||||||||
23.12.2016, 16:24 [ТС] | 9 | ||||||||||
Я поздно вообще вспомнил про это......отошел от компа...не суть. Забудем про астрактный класс Как граммотно унаследовать такой случай, как у меня выше. Зачем потомкам переопределять метод, фактически копировать его?
Хочу получить вот что
0
|
Форумчанин
![]() ![]() 8164 / 5012 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
|
||||||
23.12.2016, 16:28 | 10 | |||||
Всё просто.
В потомках нужна реализация по умолчанию или переопределённая - использовать виртуальные функции. В потомках нужно требовать явного определения метода - использовать чисто виртуальные функции. При этом можно их реализовать и использовать как реализацию по умолчанию, но требование всё равно останется. Добавлено через 3 минуты Не за чем, просто не переопределяйте его и будет вызвана последняя переопределённая функция. Кстати, можно использовать конструкторы базового класса, если новых свойств он не содержит. С помощью ключевого слова using (С++11).
0
|
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
|
|
23.12.2016, 16:30 [ТС] | 11 |
Это дык понятно. Было не понятно, я бы навреное это не написал бы.
Вот я переопределил функцию член. А в std::exception или другом подобной случае есть уже свое определение функции. Чью реализацию он унаследует? Нужно вирутальное наследование? Добавлено через 23 секунды Это дык понятно. Было не понятно, я бы навреное это не написал бы. Вот я переопределил функцию член. А в std::exception или другом подобной случае есть уже свое определение функции. Чью реализацию он унаследует? Нужно вирутальное наследование?
0
|
Форумчанин
![]() ![]() 8164 / 5012 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
|
|||||||||||
23.12.2016, 16:33 | 12 | ||||||||||
Я вам уже несколько раз писал: Опять же У вас тут нет никакого множественного наследования. Добавлено через 1 минуту
0
|
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
|
|
23.12.2016, 16:34 [ТС] | 13 |
Добавлено через 48 секунд
Понятно. А где это оговоренно? что последняя переопределенная функция?
0
|
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
|
|
26.12.2016, 16:28 [ТС] | 15 |
Эх . . . ну пусть будет так по букве стандарта. Спасибо за интересную беседу.
0
|
26.12.2016, 16:28 | |
Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь. Разработать абстрактный класс класс Point для задания координаты Класс: Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра. Абстрактный класс, наследование, класс хранится в другом классе
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |