1 | |
Pure virtual function definition (C++11)17.03.2015, 21:38. Показов 5037. Ответов 11
Метки нет (Все метки)
0
|
17.03.2015, 21:38 | |
Ответы с готовыми решениями:
11
R6025 pure virtual function call Pure virtual function call (не видит переопределенный метод) R6025 pure virtual function call при вызове метода, реализованного в дочернем классе Protected abstract virtual base pure virtual private destructor |
Модератор
13636 / 10857 / 6452
Регистрация: 18.12.2011
Сообщений: 28,941
|
|
17.03.2015, 21:53 | 2 |
1. Для того, чтобы нельзя было создать экземпляр базового класса.
0
|
Неэпический
|
||||||
17.03.2015, 21:53 | 3 | |||||
Допустим, если у Вас есть вызов виртуальной функции в конструкторе
2
|
17.03.2015, 22:44 [ТС] | 4 | |||||||||||||||
zss, Вы не правильно поняли суть вопроса.
Croessmah, как вариант сойдёт. Правда GCC ругается:
Внесу некоторую ясность. declaration - объявление:
По этому мне стало интересно, для чего это может понадобится и в каких случаях пригодиться.
1
|
Форумчанин
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||||||
17.03.2015, 23:47 | 5 | ||||||||||
Сообщение было отмечено Ilot как решение
Решение
Для чего может понадобиться чисто виртуальная функция объяснять не буду - думаю знаешь. А вот её реализацию можно сделать чтобы задать дефолтное поведение. То есть не хотим реализовывать - вызываем базовую. Вот кстати пример, как можно её вызвать напрямую.
http://stackoverflow.com/quest... onstructor http://stackoverflow.com/quest... l-function Добавлено через 8 минут У нас в проекте достаточно часто это используется - есть набор абстрактных методов, которые ты просто обязан реализовать или явно указать, что хочешь дефолтное поведение.
Также бывает, что в чисто виртуальной функции лежат какие-то общие алгоритмы работы, но для каждого производного класса они не полностью описывают необходимый алгоритм.
4
|
8971 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
18.03.2015, 00:12 | 6 |
0
|
13 / 13 / 2
Регистрация: 13.09.2013
Сообщений: 113
|
|
18.03.2015, 01:46 | 7 |
castaway, для того что бы реализовать интерфейс, что бы в конечном итоге минимизировать зависимости. При объявлении не pure vf вы будете вынуждены дать определение ф-и (а кому оно надо,если класс - чистый интерфейс?). Еще и еще раз : методы должны вызываться через интерфейс, только так можно достичь максимальной гибкости системы (аля паттерны gof).
0
|
8971 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
18.03.2015, 01:59 | 8 |
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||
18.03.2015, 10:31 | 11 | ||||||||||
castaway, Ну синтетический пример.
Данный код работать не будет.
Причина: N3376 12.4/9
1
|
Форумчанин
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
18.03.2015, 14:36 | 12 |
Примерами ничего. Я ссылки дал с подробным описанием проблемы. Программа соответствует стандарту, но её поведение может быть неочевидно. Я сам наступал на эти грабли (хотел инициализировать в конструкторе часть класса с помощью виртуальной функции), поэтому в курсе, что так делать нельзя. Но для многих читающих это может быть неочевидно.
По ссылкам выше подробнее. Не по теме: Мы на Вы? оО
1
|
18.03.2015, 14:36 | |
18.03.2015, 14:36 | |
Помогаю со студенческими работами здесь
12
В дочерних классах компилятор сообщает об Undefined reference to pure virtual functions A function-definition is not allowed here before Error: a function-definition is not allowed here before '{' token| Error: a function-definition is not allowed here before '{' token| Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |