[с++] абстрактный базовы класс
ты его не можешь создавать при помощи new, а так экземпляры внутри производных нормально создаются. Сам подумай, чем добавление функции virtual foo = 0; мешает работе класса? Да ничем, главное не вызывать эту функцию. А если мы создаем в итоге не абстрактный класс, то ее уже можно вызывать и никаких проблем, соответственно, нету.
то есть внутри производногго класса абстрактный базовый класс, то есть те элементы данных которые ему соответствуют - создаются, и те функции, что не чисто виртуальные - могут вызываться элементами базового класса?
Единственный момент здесь вот в чем: виртуальные функции начинают правильно работать только после вызова соответствующего конструктора, поэтому да, чистые виртуальные функции нельзя вызывать из конструктора базового класса (да и вообще, любые виртуальные функции, они неправильно работают, т.е. не работает полиморфизм, а в случае чистых виртуальных функций вообще UB).
То же самое и к деструкторам относится.
спасибо за помощь, помог разобраться
чисто виртуальные тоже могутВопрос, вероятно, был всё-таки о том, могут ли чисто виртуальные функции вызываться из конструктора абстрактного класса.
В таком случае правильный ответ - нет. Вернее, подобное поведение не определено в стандарте.
Member functions can be called from a constructor (or destructor) of an abstract class; the effect of making a virtual call ... to a pure virtual function directly or indirectly for the object being created (or destroyed) from such a constructor (or destructor) is undefined.
зачем ты это написал?
зачем ты это написал?Решил, что это - важная деталь, которую автор темы желал бы узнать
а ты заметил, что я об этом написал в том же сообщении, и даже в более полном объеме? (в частности, напомнил еще и о деструкторе)
как все же хорошо в FORTRAN и C без абстрактных классов и виртуальных функций.
Оставить комментарий
xoki87
я в с++ пока новичок, не понятен следующий момент. Экземпляр абстрактного базового класса не создается, хотя сам класс наследуется. что же происходит в производном класе? как работают конструкторы Абстрактногго базового класса