Комментарии 43
честно говоря, попахивает занудством и чрезмерной академичностью, хотя с другой стороны полезно для проведения собеседования :)
вот если бы реальные примеры из жизни, где эти знания пригодятся…
вот если бы реальные примеры из жизни, где эти знания пригодятся…
На собеседованиях не это надо спрашивать (разве что в вопросе «на засыпку»). По поводу собеседований читать там — russian.joelonsoftware.com/Articles/Interviewing.html
а за примерами можно в гугл слазить — он их знает 8) тут же пища для размышлений дана…
а за примерами можно в гугл слазить — он их знает 8) тут же пища для размышлений дана…
у меня на одном из собеседований спрашивали что такое вирт. деструкторы.
А я уж переживал, что мою идею касательно «мифов» никто не подхватит :)
По поводу виртуальных конструкторов всё немного интереснее. Поэтому я думаю посвятить этому целую (хоть и не большую) статью.
А по поводу чистых виртуальных деструкторов, я думаю нужно сделать ударение на том, что они должны иметь тело…
По поводу виртуальных конструкторов всё немного интереснее. Поэтому я думаю посвятить этому целую (хоть и не большую) статью.
А по поводу чистых виртуальных деструкторов, я думаю нужно сделать ударение на том, что они должны иметь тело…
>А по поводу чистых виртуальных деструкторов, я думаю нужно сделать ударение на том, что они должны иметь тело…
Вам наврали. С чего это вы взяли про «должны»? Сделайте класс со статическими функциями и используйте наздоровье (пример использования), и заодно «запечатанный» будет (в c# это static sealed подобие).
Вам наврали. С чего это вы взяли про «должны»? Сделайте класс со статическими функциями и используйте наздоровье (пример использования), и заодно «запечатанный» будет (в c# это static sealed подобие).
Ать, не интересно. Это опять таки не мифы. Люди, которые знают о существовании чисто виртуальных деструкторов с реализацией по умолчанию, знают также все те факты, что вы привели. Для большинства же людей хватает правила «Делайте деструктор базового класса виртуальным, если какой-нибудь из наследников данного класса будет удален полиморфно».
> Для чего нужен подобный чисто виртуальный деструктор? Это используется для того, чтобы сделать класс абстрактным, не создавая чисто виртуальных функций.
Правильно, очередной рудимент языка и способ попортить нервы на собеседованиях :)
> Для чего нужен подобный чисто виртуальный деструктор? Это используется для того, чтобы сделать класс абстрактным, не создавая чисто виртуальных функций.
Правильно, очередной рудимент языка и способ попортить нервы на собеседованиях :)
Господи, когда же Вы наконец уйметесь?! =) Мифы, не мифы… Прицепились к названию, и упорно продолжаете твердить, что это всем известно. Я каждый день общаюсь в университете со студентами и со стопроцентной уверенностью заявляю Вам: «Не всем! Я и сам не так давно „развеял” для себя некоторые мифы».
Уймусь тогда, когда напишите нечто, совершенно ранее не изжеванное в многих источниках (pure virtual desctructor был у Майерса в More Exceptional C++ второй книге, извините за дотошность). Когда это обычная праздная информация, поданная с такой позиции — это не интересно :) В том же С++ множество неизведанных уголков, а предпочитают обсуждать одно и то же %)
Ну и студент — это не программист высокой квалификации (только если это не работающий студент).
Естественно, что Вам неинтересно. Потому как Вы давно прошли данный этап изучения C++. Если Вы штудируете Мейерса, Саттера и Александреску на английском языке, то другие в это время в лучшем случае читают не лучшего IMHO качества, но почему-то безумно популярную книгу Дейтлов с плохим переводом.
Я писал не для таких, как Вы. И человек, который решил дополнить мою статью, видимо тоже. Если я для совсем начинающих захочу написать, что такое препроцессор, компилятор и компоновщик, и какие функции они выполняют, Вы тоже будете кричать, что это неинтересно и написано во всех книгах (кстати, на самом деле не во всех ;))?
Я по себе знаю, как трудно было искать подходящие книги, притом в печатном виде — это недешевое нынче удовольствие, а в электронном — все материалы в основном на английском. Может для кого-то английский и не проблема, но есть и такие, которые не смогут читать и понимать тексты на неродном языке.
Почему бы Вам не написать «незаезженную» статью по чистому C++, дабы показать хороший пример?
Я писал не для таких, как Вы. И человек, который решил дополнить мою статью, видимо тоже. Если я для совсем начинающих захочу написать, что такое препроцессор, компилятор и компоновщик, и какие функции они выполняют, Вы тоже будете кричать, что это неинтересно и написано во всех книгах (кстати, на самом деле не во всех ;))?
Я по себе знаю, как трудно было искать подходящие книги, притом в печатном виде — это недешевое нынче удовольствие, а в электронном — все материалы в основном на английском. Может для кого-то английский и не проблема, но есть и такие, которые не смогут читать и понимать тексты на неродном языке.
Почему бы Вам не написать «незаезженную» статью по чистому C++, дабы показать хороший пример?
ИМХО все что «неизведано» описано в стандарте или UB. Да и не так много того, что не обсуждалось по этому языку… а уж про рудименты — так триграфы вот это настоящий рудимент 8)
Ну все-таки не совсем все. Я не имел ввиду чисто академические уловки, вроде той, что изложена в этой статье, а скорее практическое применение. К примеру проектирование с использованием С++ и полиморфизма времени компиляции, и многое другое, что было освоено на личном опыте. Практика — это всегда интереснее и полезнее, нежели сферический конь в вакууме.
Ололо!
>Советую посмотреть, как виртуальные конструкторы реализованы в Delphi
это канал про анимэ, Вам не сюда, похоже…
это канал про анимэ, Вам не сюда, похоже…
У объектов Delphi и C++ есть коренная разница. Delphi — это, скорее, Java ;-)
простой вопрос — в чем разница между a->get(); и a.get(); и какой ближе делфи? а джаве? :-)
Вообще говоря, это все условности. Вы так же правы, как и я. Если взять, скажем, наличие виртуальных и «обычных» функций — то Object Pascal ближе к C++, с другой стороны можно посчитать, что наличие «обычных» объектов в C++ роднит его с Jаva — этакая «сборка мусора» ;-)
Множественного наследования, кстати, в C++ тоже не было некоторое время.
Множественного наследования, кстати, в C++ тоже не было некоторое время.
Также определять можно и другие чисто виртуальные функции.А зачем?
Затем, что абстрактный класс в С++ это не обязательно интерфейс. У него могут быть члены-данные, которыми можно оперировать из функций-членов, в том числе виртуальных, в том числе чисто виртуальных.
Вот мне и интересно, каким образом чисто виртуальные функции могут чем-то оперировать? Что, можно написать class K { int i; virtual void foo() = 0 { ++i; } }, и «=0» не будет обнулять тело функции, а только задавать абстрактность класса?
вы невнимательно читали: со слов «Почему надо писать именно с определением деструктора?»
>Зачем писать "=0" если мы определяем тело?
я описывал именно [b]чисто виртуальный деструктор[/b]. и зачем это может понадобиться тоже указывал: читайте со слов «Для чего нужен подобный чисто виртуальный деструктор?»
>Или, зачем определять тело, если мы пишем "=0"?
И это я тоже указывал: читать со слов «Почему надо писать именно с определением деструктора?»
я описывал именно [b]чисто виртуальный деструктор[/b]. и зачем это может понадобиться тоже указывал: читайте со слов «Для чего нужен подобный чисто виртуальный деструктор?»
>Или, зачем определять тело, если мы пишем "=0"?
И это я тоже указывал: читать со слов «Почему надо писать именно с определением деструктора?»
В плане чистого виртуального деструктора ясно…
А если это просто чисто виртуальная функция (то бишь абстрактный метод), то в принципе тело его можно определить, чтобы заключить в него какую-то общую часть алгоритма, а в переопределенных версиях (в классах-потомках) вызывать его напрямую.
А если это просто чисто виртуальная функция (то бишь абстрактный метод), то в принципе тело его можно определить, чтобы заключить в него какую-то общую часть алгоритма, а в переопределенных версиях (в классах-потомках) вызывать его напрямую.
Я бы на вашем месте выделял неверные утверждения цветом, а не писал об истинности после. Сильно сбивает.
Спасибо за подробную статью, некоторых вещей не знал. Теперь знаю. (:
P.S. наЛСДеники — шикарно.
P.S. наЛСДеники — шикарно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
C++ MythBusters. Миф о виртуальных функциях (дополнение)