Разбор базы данных книг подходит к концу, благодаря RXL все выложенные в феврале книги возвращаются в базу и надеюсь уже в ближейших выпусках я смогу порадовать вас анонсом правильных мест для скачивания этих книг.
По письму читателя исправлена статья о Виртуальных функциях часть 2 в которой все примеры были не читабельны по моей вине.
Ну и вышла третья часть, заключительная, серии статей по виртуальным функциям, обсуждение которых уже в самом начале было довольно интересным.
Теперь о блоге. Я уже говорил, но видимо неправильно сказал. Нужны люди, которые будут помогать заполнять новую ленту нам всем. Сегодня этим уже занимаются 2 человека, плюс на подходе еще несколько кандидатур, однако сам поиск новостей занимает очень много времени. Вспомните, что такие знаменитые сайты как nnm.ru и kpnemo.ru тоже делаются с новостей добываемых посетителяим. Огромная просьба ко всем вам. Е кто может и бывает на сайте, если вы видели или прочитали новость касающуюся программирования, просто
заполните поля вот тут: http://club.shelek.com/addblog.php и новость попадет в ленту после ее проверки. Те кто на сайт не попадает но видит интересные новости от сатов в рассылках или по почте, высылайте на mailto:club@shelek.com и новость так же попадет в блог.
Блога чисто программистского, не касающегося взломов и всякой лабуды пока не существует. Я надеюсь что с вашей активной помощью мы его создадим, веренее сделаем удобным и обновляемым.
Этой частью мы завершим начатое в первой и второй частях статьи рассмотрение использования виртуальных функций. Если вы читали серию статей «Классы. Копирование и присваивание», то помните, что там говорилось о том, как создаются объекты классов. Теперь поговорим о том, как они уничтожаются. Правда, следует оговориться сразу. Очень неплохо если вы уже знаете, что такое деструкторы в целом. Поскольку эта теоретическая часть сюда никак не вписывается.
Если вы не знакомы с этим, совсем не помешает для начала почитать что-либо о конструкторах и деструкторах классов.
Когда нужны виртуальные деструкторы? Давайте начнем изучение вопроса с рассмотрения простого (и ставшего уже классическим) примера.
Соорудим некий класс, который может запоминать строковое значение. И пусть он у нас будет базовым классом (правда не абстрактным, так как это не важно в данном случае), из него мы будем выводить другие. Итак.
Все просто. Конструктор класса выделяет память для строки путем обращения к библиотечной функции strdup и сохраняет адрес новой строки в указателе sp1. Деструктор класса освобождает эту память, когда объект класса Base выходит из области видимости. Далее, из базового класса выведем новый класс. Вот такой: class Derived: public Base { private: char
*sp2; public: Derived(const char *S1, const char *S2): Base(S1) { sp2=strdup(S2); } //это был конструктор ~Derived() { delete sp2; } //а это уже деструктор };
И еще. Если есть желающие с опытом и без поработать над созданием ежемесяцного офлайн журнала, но не на бумаге, а только в электронном виде, в формате pdf первый номер которого вышел недавно и готовится второй, обращаться на соответствующий форум сюда: http://forum.shelek.com/index.php/board,80.0.html