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

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 414
от 22.05.2006, 13:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 330, Экспертов: 46
В номере:Вопросов: 7, Ответов: 12


Вопрос № 43210: Доброго времени суток!!! у меня есть небольшой вопросик по классам... есть класс А, у него есть свой конструктор, и есть класс В с долбавленными полями, в связи с чем мне нужен для этого класса свой конструктор, который перекрывает ...
Вопрос № 43213: Уважаемые эксперты, у меня снова к вам идиотский вопрос! никогда не писал гуи, поэтому наверное то что я спрошу и вслух то стыдно произносить, но всё таки нужно это узнать... В общем вынужден работать в Visual Studio 6.0 и создать приложение, кот...
Вопрос № 43237: Здравствуйте эксперты Посоветуйте пожалуйста, 1. как в Си++Билдера получить "зашитый" серийник винчестера? 2. как организовать исполнение динамически генерируемого бинарного кода из сегмента данных? ..
Вопрос № 43291: Призадумался вот над такой задачей: Можно ли проимитировать выключение ПК, НО! не выключая его. То есть чтобы пользователь думал что он выключил ПК ( Пуск - Завершение работы), а ПК на самом деле остался включенным и по отправленному ПК пакету, он пр...
Вопрос № 43309: Уважаемые эксперты я никогда не работал с файлами в С++, а тут появиласи такая задача: Дан файл f, компоненты которого являются действительными числа- ми. Hайти сумму квадратов компонент файла f. Пожалуста дайте ответ с коментар...
Вопрос № 43310: Здравствуйте! Псомотрите тчо не так в задаче: тут структура (БД сотрудников) когда я ее ввожу все нормально, но когда она выводится на экран то почти все нормально, т.е. перед выводо зарплаты последнего сотрудника не стаится разделитель Tab(...
Вопрос № 43321: Здраствуйте, имеется цледующая проблема при возврате из функции deQueue() теряется имя у Client на сколько мне известно это происходит когда конструктор не переписывает имя, подскажите пожалуста в чем моя ошибка...

Вопрос № 43.210
Доброго времени суток!!!

у меня есть небольшой вопросик по классам...

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

ответы лучше в примерах... ))
З.Ы. Заранее спасибо!!!!!
Отправлен: 16.05.2006, 12:39
Вопрос задал: Баркин Алексей (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Zitz
Здравствуйте, Баркин Алексей!

Единственную проблему здесь вижу это запустить конструктор базового класса с параметром...
В приложении конструктор CDlgDlg
CDlgDlg - наследник CDialog

Приложение:

---------
Успех неизбежен

Ответ отправил: Zitz (статус: 10-ый класс)
Ответ отправлен: 16.05.2006, 13:00

Отвечает: RedDevil
Здравствуйте, Баркин Алексей!
Вначале значит по любому получается, что класс B наследует класс, хотя вы этого не указали, по другому никак. В любом случае вам нужно, чтобы класс B не вызывал констркутор класса A. В С++ это делается по умолчанию. То есть просто так отменить вызов конструктора нельзя. Но можно пойти другим путем. Создать в классе A пустой конструктор, с какими-нибудь параметрами, которые в вашем классе не используются вообще.
Вся идея основывается на том, чтобы вызывать "пустой" конструктор базового класса. По умолчанию всегда вызывается конструктор без параметров.

Приложение:

---------
Есть 10 типов людей: те, кто знаком с двоичной системой, и те, кто нет.

Ответ отправил: RedDevil (статус: Студент)
Ответ отправлен: 17.05.2006, 08:33


Вопрос № 43.213
Уважаемые эксперты, у меня снова к вам идиотский вопрос!
никогда не писал гуи, поэтому наверное то что я спрошу и вслух то стыдно произносить, но всё таки нужно это узнать... В общем вынужден работать в Visual Studio 6.0 и создать приложение, которое бы получало от пользователя какой лиюо текст, и после этого делала с ним определённые действия... В общем для этого я создаю новый проект, и выбираю диалоговое приложение... дальше перетягиваю на основное окно Edit Control. Как считывать из edit в переменную данные набранные польбзователем? ещё раз сорри за тупизм...
Отправлен: 16.05.2006, 12:54
Вопрос задал: Nikolay M Petrov (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Santana
Здравствуйте, Nikolay M Petrov!
Любой Edit имеет свойство text. Edit->Text как раз то что тебе надо. Читай ООП
:)
Ответ отправил: Santana (статус: 2-ой класс)
Ответ отправлен: 16.05.2006, 13:05
Оценка за ответ: 5

Отвечает: Zitz
Здравствуйте, Nikolay M Petrov!

1.
Самое простое это привязать к эдиту переменную:
View->Class wizard->Member variablel->add variable, привязываем например CString.
А потом уже работает непосредственно с ним.
Перед работой переменной нужно вызвать:
UpdateData(TRUE);
если изменили ее, то UpdateData(FALSE);
// если не путаю...

2.
Вызвать
GetDlgItem(ИДЕНТИФИКАТОРЭДИТА)
он вернет указатель на его окно, т.е. CWnd *
Из которого уже можно вытащить GetWindowText(Указатель в CString)
И попутно много полезных весчей... ;)

3. (упрощенный пункт № 2)
Вызвать GetDlgItemText(ИДЕНТИФИКАТОРЭДИТА, уазатель в CString)
---------
Успех неизбежен
Ответ отправил: Zitz (статус: 10-ый класс)
Ответ отправлен: 16.05.2006, 13:14
Оценка за ответ: 5


Вопрос № 43.237
Здравствуйте эксперты
Посоветуйте пожалуйста,
1. как в Си++Билдера получить "зашитый" серийник винчестера?
2. как организовать исполнение динамически генерируемого бинарного кода из сегмента данных?
Отправлен: 16.05.2006, 14:55
Вопрос задал: Idle_processing (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лучников Ю.В.
Здравствуйте, Idle_processing!

1.

unsigned long VolSerial;
if(GetVolumeInformation("C:\", NULL, 0, &VolSerial, NULL, NULL, NULL, 0))
Label1->Caption = IntToHex((int)VolSerial, 0);
else Label1->Caption = "ERROR!";


2. Задайте этот вопрос в рассылку по ассемблеру ...
Успехов!
Ответ отправил: Лучников Ю.В. (статус: *Мастер-Эксперт)
Россия, Киров
WWW: нЧат - Наш Чат!
ICQ: 176308580
----
Ответ отправлен: 17.05.2006, 04:43
Оценка за ответ: 3
Комментарий оценки:
Меня интересует не серийник тома (раздела), а сам физический серийник, "зашитый" в плате винчестера.
Дело в том, что серийник тома (раздела) меняется при форматировании, а серийник винчестера один на всю его жизнь.


Вопрос № 43.291
Призадумался вот над такой задачей: Можно ли проимитировать выключение ПК, НО! не выключая его. То есть чтобы пользователь думал что он выключил ПК ( Пуск - Завершение работы), а ПК на самом деле остался включенным и по отправленному ПК пакету, он проснулся.
Отправлен: 17.05.2006, 06:55
Вопрос задал: SUPcOZA (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Sergijj
Здравствуйте, SUPcOZA!

Можно. Но для этого нужно:
1. Физический доступ к компу при первоначальной настройке (подправить в BIOS настройки (уходить в полный слип (с отключением HDD, монитора, всех вентиляторов), просыпаться от сети (модема, либо с др. устройств, использующих IRQ)), - да и то, если BIOS поддерживает это);
2. Писать много низкоуровневого кода типа: перехватывать соответствующие прерывания, делать свою обработку их, проверять каскад перехвата на переперехват, и т.д.; а если уж совсем честно хочется - лезть в BIOS (копаться с его кодами и функциями (через shadow memory)).

Стандартных таких функций - нет и быть не может...;-)

Помню, народ в КЦ при ЛГДТЮ шуточки всякие с этим делал ещё на Tech'ах (i80287), типа:
лезем в BIOS, выдираем оттуда (вручную) интерфейс загрузки, перехватываем 0FF00h, а в конце выводим какую-нибудь надпись типа System Halted, а после того, как юзер наОХается - выводим сообщение типа (Intel repaired system...) и выходим из собственной программы...:)
А не отсюда ли пошла "слава" Интелей?...:-)
Правда срабатывало это только если кто-то (Ctrl+Alt+Del или какая-то прога) хотел перезагрузиться. При кнопке выключения питания это не срабатывало, ибо тогда об ATX даже в проекте не слышали...;-)
Про кнопку Power - курочить BIOS, либо в techHelp.

P.S.: Много по Shadow BIOS и по всяким Suspend и Sleep режимам и кодам - есть в XView, который я Вам присылал... Кстати, он и есть последний techHelp (во всяком случае новее я ничего не видел).

---------
Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 3-ий класс)
Ответ отправлен: 17.05.2006, 09:20

Отвечает: Santana
Здравствуйте, SUPcOZA!
Вообще-то этот процесс назвается засыпанием. программно делается также как и выключение (подробности не помню, ищи в сети). а просыпание зависит от натсроек в БИОСЕ. так что дерзай. в зависимости от модели даже от прихода письма может проснутся :)
Ответ отправил: Santana (статус: 2-ой класс)
Ответ отправлен: 17.05.2006, 09:48
Оценка за ответ: 3
Комментарий оценки:
Если бы все было так просто. Факт в том нужно перехватывать ВСЕ попытки юзера выключить (зав работы, rundll32.exe powrprof.dll,SetSuspendState и так далее.
То есть оформлять свой перехватчик в виде службы?


Вопрос № 43.309
Уважаемые эксперты я никогда не работал с файлами в С++, а тут появиласи такая задача:

Дан файл f, компоненты которого являются действительными числа-
ми. Hайти сумму квадратов компонент файла f.

Пожалуста дайте ответ с коментариями, да желетельно что бы программа работала под Turbo C++.

Заранее благодарен.

Отправлен: 17.05.2006, 11:14
Вопрос задал: Gh0stik (статус: 7-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Dr_Andrew
Здравствуйте, Рубан Николай Николаевич!
Насчёт Turbo C++, это вряд ли, но при использовании более современного компилятора (с поддержкой Standard C++) код ниже будет работать.

Приложение:

Ответ отправил: Dr_Andrew (статус: 1-ый класс)
Ответ отправлен: 17.05.2006, 12:16
Оценка за ответ: 4
Комментарий оценки:
Спасибо за ответ, но все таки хотелось бы Turbo C++

Отвечает: Boriss
Здравствуйте, Рубан Николай Николаевич!
Вот Вам на Turbo C (проверено на Turbo C 2.0) :))
Какие комментарии Вам нужны - на минифоруме. Так как, по-моему, все очень просто

Приложение:

---------
Вывод - то место в тексте, где вы устали думать

Ответ отправил: Boriss (статус: Профессор)
Россия, Саранск
Организация: факультет Электронной техники, Мордовский госуниверситет
Адрес: г. Саранск
WWW: Программирование на Паскале
----
Ответ отправлен: 17.05.2006, 15:36
Оценка за ответ: 5
Комментарий оценки:
Да программа работает отлично, только на сколько я понял мы используем не типизированный файл.

А как чтобы программа работала с текстовым файлом:
1) данный введены на отдельных строках;
2) данный введены через пробел (для переменных целого типа)

Отвечает: Селиванов Александр Владимирович
Здравствуйте, Рубан Николай Николаевич!
Всё очень просто, достаточно один раз понять...
//----------------------------------------------------------------------------------------
#include <stdio.h>

int main(void)
{
FILE *fp; // объявляем указатель на файл
if((fp = fopen("data.txt", "r")) == NULL) // если файла нет
{
printf(" file nos found"); // выводим сообщение
return 1; // и выходим
}
float summ(0), a; // summ - накопление суммы, a - текущее число
while(!feof(fp)) // пока не конец файла
{
fscanf(fp, "%g", &a); // считываем действительное число
// в любой форме: хоть в експоненциальной (3.3e-1)
// хоть в обычной (0.33 или .33)
summ += a*a; // накапливаем сумму
}
printf(" %g", summ); // выводим сумму
fclose(fp); // закрываем файл
return 0;
}
//----------------------------------------------------------------------------------------

в приложении тестовый файл "data.txt"

Желаю удачи!

Приложение:

Ответ отправил: Селиванов Александр Владимирович (статус: 1-ый класс)
Ответ отправлен: 17.05.2006, 18:49


Вопрос № 43.310
Здравствуйте!
Псомотрите тчо не так в задаче:
тут структура (БД сотрудников) когда я ее ввожу все нормально, но когда она выводится на экран то почти все нормально, т.е. перед выводо зарплаты последнего сотрудника не стаится разделитель Tab( )
и З/П идолжность последнего сотрудника сливаются
почему так?

Приложение:

Отправлен: 17.05.2006, 11:27
Вопрос задал: W4rmonger (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sergijj
Здравствуйте, W4rmonger!

Простите, но вывод - правильный.
Неправильный как раз ввод!

Дело в том, что функция scanf() в параметрах требует _указатели_(!) на уже созданные переменные, а не _значения_ этих переменных! Загляните ещё раз в мануал.
Когда вы подставляли в scanf() такое:
int n;
scanf("%d", n);
то scanf благополучно писал введённое с клавиатуры значение туда, куда указывал bp:n, где bp - регистр, а n - смещение в этом регистре.
Поэтому в scanf() нужно подставлять именно _адреса_ соответствующих переменных, а то как же иначе scanf() узнает куда результат клать?...:)
Да, отсюда есть одно исключение - массивы. Почему так? А потому, что массив в языке C - это и есть _указатель_...:)
Соответственно к _строкам_ операцию "получить адрес" (т.е. амперсанд ("&")) применять не нужно, - они и сами '&'...;-)

Короче, подправил я Вам код (см. приложение). Сравните его со своим и перечитайте мои комментарии. Тогда разберётесь легко.

Удачи!

Приложение:

---------
Стучитесь! И Вас откопают...

Ответ отправил: Sergijj (статус: 3-ий класс)
Ответ отправлен: 17.05.2006, 18:41


Вопрос № 43.321
Здраствуйте, имеется цледующая проблема
при возврате из функции deQueue() теряется имя у Client
на сколько мне известно это происходит когда конструктор не переписывает имя, подскажите пожалуста в чем моя ошибка

Приложение:

Отправлен: 17.05.2006, 12:40
Вопрос задал: Pumych (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: X-MAN
Здравствуйте, Pumych!
Скорее всего потому что если у вас более одного узла, неизвестно что будет возвращено:

Client ClientQueue::deQueue()
{
if(head==tail) //If there is only one Client in queue
{
Client tmp(*head);
return (tmp);
}
//А тут что возвращаем? Непонятно!
}
---------
Оптимисты начинают день с имунеле, реалисты - с кофе, а пессимисты - с водки!
Ответ отправил: X-MAN (статус: 6-ой класс)
Ответ отправлен: 17.05.2006, 22:18


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.32 от 03.05.2006
Яндекс Rambler's Top100

В избранное