Отправляет email-рассылки с помощью сервиса Sendsay

Инвестиции: Вопрос-Ответ

  Все выпуски  

C/C++ Вопрос-Ответ Выпуск № 20


Информационный Канал Subscribe.Ru

C/C++ Вопрос-Ответ

Выпуск      : 20
Подписчиков : 1485
Cайт        : SoftMaker.com.ru
Архив       : C/C++ Вопрос-Ответ (архив)
В этом выпуске
От ведущего

Здравствуйте уважаемые подписчики !

Как всегда, рад приветствовть вас на страницах этой рассылки.
Напоминаю, что, как обычно, вы можете отправить свои пожелания (замечания, предложения, сообщения об ошибках) по поводу рассылки и сайта по этому адресу.
Если вы хотите создать и вести какой либо раздел в этой рассылке - также пишите мне.

И, как всегда, вы можете задать свои вопросы по программированию на сайте в форуме.
Или обсудить их в дискуссионном листе "Программирование. форум !!!".

Многим может быть также интересна рассылка: Visual С++ - расширенное программирование, где можно прочитать описания нестандартных приемов программирования с помощъю библиотеки MFC - 'трюков', 'хаков', недокументированных функций.

С уважением, Вахтуров Виктор.

Подписчикам

Чтобы заранее разрешить возможные недоразумения, прошу Вас помнить, что вопросы публикуются в рассылке только один раз. Поэтому, если Вам не ответили в этом выпуске, или ваш вопрос не был опубликован, пришлите его еще раз. Не стоит отвечать на вопрос, который был задан в предыдущем выпуске (за исключением случая, когда он снова опубликован в этом).

Для того, чтобы задать свой вопрос, пришлите письмо, кликнув по этой ссылке.
Для того, чтобы ответить на вопрос, надо кликнуть по ссылке "ответить", расположенной под текстом вопроса.

Небольшое примечание. Господа, если Вы хотите, чтобы Ваш e-mail был опубликован в рассылке, специально и явно укажите это в письме. Иначе e-mail адреса, указанные в теле Вашего письма в рассылке опубликованы не будут.

Вопросы

Для того, чтобы задать свой вопрос, кликните этой ссылке (вопрос будет опубликован в следующем номере).
Вы можете задавать любые вопросы, касающиеся программирования на языке C и C++. Это могут быть вопросы, касающиеся как конструкций языка, применения библиотек классов, шаблонов (таких как MFC или STL), использования компиляторов, так и самой философии программирования на C или C++. Здесь нет ограничений - спрашивайте и получайте ответы.

Вопрос № 81 ( fox007 )

Здравствуйте!
Я только начинаю заниматься программированием на VC.
Разбирался со следующим примером:

#include <mem.h>
class Cthat
{
public:
        void doIt(void){return;};
};

class CPthat
{
private:
        Cthat* aThat;
public:
        CPthat(Cthat* _that=NULL):aThat(_that){};
        ~CPthat(){ if (aThat) delete aThat;};
        operator Cthat* (){return aThat;};
                          // Оператор преобразования типа
        CThat* operator->() {return aThat;};
                          // Оператор селектора ->
};

int main ()
{
        CPthat pthat(new Cthat);
        pthat->doIt();
                  // Вариант обращения через ->
        ((Cthat*)pthat)->doIt ();
                  //Вариант обращения через Cthat*
        delete aThat;
        return 0;
}

Пробовал, все работает. Но может кто-то объяснит как в случае
такого обращения (pthat->doIt()) происходит вызов метода класса
Cthat. Ведь после pthat-> мы получаем указатель на объект класса
Cthat, и вроде как надо бы так: (pthat->)->doIt().

Заранее благодарю за ответ.

Ответить на вопрос

Вопрос № 82 ( Aury )

Я начинающий в C++. И мой вопрос наверно прозвучит не ново. Однако хотелось бы услышать что все таки думают по этому поводу опытные люди.
Мой вопрос такой. Какие книги вы бы посоветовали читать ив какой последовательности, чтобы наиболее быстро и полно освоить как сам язык C++, так и приемы программирования вообще. То есть как надо учиться.

Было бы здорово, если бы кто нибудь подкинул ссылочек на электронные варианты книг. И хотелось бы аргументации в плане почему именно такие то книги надо читать первыми, почему именно они считаются лучшими.

Всем заранее большое спасибо !.

Ответить на вопрос

Вопрос № 83 ( surf3267 )

Hello, All !

Не подскаже те ли как лучше всего организовать в своей проге просмотр
Jpeg файлов ? Нет ли каких средств, специально для этого ?
И еще - если писать просмотрщик картинок, то на чем лучше это делать ?
На Visual C или на Buildere ?

Ответить на вопрос

Ответы

Ниже приведены вопросы предыдущего выпуска и ответы на них.

Вопрос № 78 ( Able )

Здравствуйте!

У меня пара вопросов по winapi!
Подскажите как можно управлять скоростью вентилятора
кулера, может есть какая нибудь функция? И ещё, как
можно при помощи api выключить монитор(в смысле погасить экран,
как это делается в настройках питания в панели управления
при долгом бездействии монитор отключается).

Ответ ( 3V )

Ну, для перевода монитора в режим с низким энергопотреблением или отключения достаточно посылки сообщения WM_SYSCOMMAND с wParam = SC_MONITORPOWER. Цитата из MSDN:

Sets the state of the display. This command supports devices that have power-saving features, such as a battery-powered personal computer.
The lParam parameter can have the following values:

1 - the display is going to low power
2 - the display is being shut off

То есть если слать сообщение (опыт показывает, что можно слать просто, например, главному окну своей проги) WM_SYSCOMMAND с параметром wParam = SC_MONITORPOWER и lParam = 1, то монитор перейдет в режим энергосбережения, если слать с lParam = 2, то - отключится.

То есть:

// код для режима энергосбережения:
::PostMessage(HWND_BROADCAST, WM_SYSCOMMAND,
              SC_MONITORPOWER, 1);

// код для отключения монитора:
::PostMessage(HWND_BROADCAST, WM_SYSCOMMAND,
              SC_MONITORPOWER, 2);

А насчет кулера - даже не знаю... Есть WMI класс Win32_Fan - по описанию - то что надо...
Вопрос № 79 ( ZVA )

Приветствую!

Недавно прочел, что при программировании на C++ можно использовать так называемые Smart-указатели. Это указатели, которые сами освобождают выделенную память, когда она больше не нужна. Ими рекомендуют пользоваться, поскольку это удобно.
Напишите пожалуйста как можно использовать эти указатели. Какие типы надо объявлять и какие библиотеки использовать. Если можно, приведите пожалуйста небольшой пример использования таких указателей.

Заранее спасибо.

Ответ ( Michael Jastrebtsoff )

Здравствуйте,

Смарт-указатели - это специальные объекты, которые владеют динамически
выделенными объектами и выполняют автоматическое их удаление при
выходе из области видимости. Частный пример, это класс auto_ptr стандартной
библиотеки.

Пример:

class A {...};
       
void f()
{
     A* pa = new A;
     ...
     delete pa;
}

Данная функция небезопасна с точки зрения освобождения pa, т.е. при
возникновении исключительной ситуации(или досрочный return) произойдет
утечка памяти. auto_ptr призван решать данные проблемы:


На самом деле auto_ptr имеет проблемы, например его нельзя
использовать со стандартными контейнерами. Он не производит подсчет
ссылок. Для более полного понимания, рекомендую обратиться к
соответствующей литературе.

Рекомендую обратить внимание на библиотеку boost(www.boost.org), там
очень сильная реализация smart pointers, если нет желания использовать
boost(указатели лишь ее малая часть), можно найти отдельные
реализации smart указателей, я лично пользуюсь
http://www.d-bross.com/_bg/papers/SmartPtr.shtml.

Ответ ( Александр Носков )

В стандартной библиотеке С++ имеется класс auto_ptr, который представляет
собой "умный указатель" (Smart-указатель). Данный класс поддерживает
семантику строгой принадлежности. Т.е. объект, на который ссылается
auto_ptr не может принадлежать другим объектам.
Умные указатели помогают в ситуации, когда во время работы функции
происходит исключение, что приведет к немедленному выходу из функции и
операторы delete, находящиеся в конце функции, выполнены не будут. В
результате имеет место утечка памяти.
Умыный указатель освобожданет данные, на которые он ссылается, при
уничтожении самого указателя, более того, поскольку такой указатель является
локальной переменной он будет уничтожаться автоматически при выходе из
функции независимо от причины выхода - нормального завершения или исключения
(происходит обратная раскрутка стека).
Подробное описание (есть даже реализация класса) и примеры можно посмотреть
в книге издательства "Питер" Николая Джосьютис "С++ стандартная библиотека"
из серии Для профессионалов.
Вопрос № 80 ( Max116 )

Привет, All !

Не подскажет ли кто, как можно заставить модем поднять
трубку и соединиться с провайдером, а потом и оборвать
связь ?
Если кто знает, подскажите API функции, или поделитесь
ссылкой, плиз.

Ответ ( 3V )

Можно через RAS API - см. функции RasDial и RasDialDlg.
Можно через WinInet API - см. функции InternetAttemptConnect, InternetAutodial, InternetAutodialHangup, InternetDial.
Книги по C/C++
Теория и практика C++
Теория и практика C++

Автор: Герберт Шилдт

Книга Герберта Шилдта, одного из самых известных авторов компьютерной литературы, посвящена обсуждению сложных вопросов программирования. В ней подробно рассмотрены параметризованные функции и классы, а также такие задачи программирования, как:
  1. реализация разреженных массивов,
  2. построение программ разбора математических выражений,
  3. алгоритмы шифрования и сжатия данных,
  4. а также проблемы разработки собственных языков программирования и написания интеграторов для них.
Приводятся ценные практические советы по приемам и метода работы, а также тексты готовых работающих программ.

Страница книги на Озоне
C/C++. Алгоритмы и приемы программирования. Код с комментариями
C/C++. Алгоритмы и приемы программирования. Код с комментариями

Автор: Арт Фридман, Ларс Кландер, Марк Михаэлис, Г. Шилдт

Книга является репринтным изданием C/C++. Архив программ.

В ней представлен код работоспособных программ на C/C++, относящихся к самым разнообразным областям и аспектам написания приложений - от работы с достаточно простыми структурами данных (списки, деревья) до построения синтаксических анализаторов и интерпретаторов, доступа к Internet и т. п.

Программный код может использоваться в ваших программах без изменений или в модифицированном и усовершенствованном виде. Чрезвычайно полезно также его изучение в целях освоения главнейших принципов, алгоритмов и приемов решения разных задач.

Программы снабжены развернутыми комментариями и детальными пояснениями их работы.

Книга предназначена для широкого круга программистов, пишущих на языках C/C++.

Страница книги на Озоне
Всего доброго. До встречи в следующем номере.

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cppqa
Отписаться

В избранное