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

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


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


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

Выпуск № 523
от 05.06.2004, 16:00

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 1676
Отправлено ответов: 3335
Активность: 198.9 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Sedric
Статус: Доверительный
Общий рейтинг: 131.86
[Подробней >>]
CrackLab
Статус: Опытный
Общий рейтинг: 137.72
[Подробней >>]
bocha
Статус: Доверительный
Общий рейтинг: 150
[Подробней >>]
 
vitya
Статус: Профессиональный
Общий рейтинг: 109.31
[Подробней >>]
barsik
Статус: Доверительный
Общий рейтинг: 113.18
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1667. Ребята, У меня к вам вопрос по поводу книг. Хочу изучить Visua C++ 6 но незнаю какую книгу взять. П... (ответов: 2)
Вопрос № 1668. Здравствуйте эксперты Как работать с базами DAO? А конкретно: от каких внешних файлов зависит прило... (ответов: 1)
Вопрос № 1669. Здравствуйте Эксперты!Если нужно считать текст из файла ,то как то нужно ли в конце файла ставить то... (ответов: 3)
Вопрос № 1670. Здравствуйте эксперты. Вот получил ответ от эксперта bocha: HKEY_CLASSES_ROOTTypeLib{00025E01-0000-0... (ответов: 1)
Вопрос № 1671. Доброго здоровья :) У меня 2 вопроса (в порядке уменьшения значимости): 1. Возможно ли при создании ... (ответов: 2)

Вопросов: 5, ответов: 9


 Вопрос № 1667

Ребята,
У меня к вам вопрос по поводу книг. Хочу изучить Visua C++ 6
но незнаю какую книгу взять. Покупать что то о че потом пожелеешь тоже не хочется. Я уже прочитал Дейтела С++(третье издание) и теперь как бы хочется еще visual c++ для полного комплекта. Подскажите хорошую книгу. Спасибо.



Вопрос отправлен: 01.06.2004, 17:34
Отправитель: Игорь

[Следующий вопрос >>] [Список вопросов]

Отвечает Sedric

Приветствую Вас, Игорь!
Лучше MSDN нет ничего!

Ответ отправлен: 02.06.2004, 09:37
Отправитель: Sedric


Отвечает CrackLab

Здравствуйте, Игорь!
Я видел 3 книги по Visual C++, но никакая из них мне не понравилась, ну на 4- может быть потянет вот эта книжка:
Дэвис Чепмен "Освой самостоятельно VisualC++ .NET за 21 день"


Ответ отправлен: 01.06.2004, 22:09
Отправитель: CrackLab


 Вопрос № 1668

Здравствуйте эксперты
Как работать с базами DAO? А конкретно: от каких внешних файлов зависит приложениние используещее классы CDaoDatabase и CDaoRecordset. А я написал прогу с испоьзованием этих классов, прога у меня пашет, а на других машинах, при запуске выдает - "Не удается инициализировать DAO/Jet обработчик баз данных"че это за шляпа, и как с этим боротся?
И еще давно хочу узнать есть ли книга или какой нить мануал типа: "Visual C++ и базы данных от А до Я", где все подробно расписано.
Заранее благодарен.
Абрамовский Иван.



Вопрос отправлен: 01.06.2004, 20:29
Отправитель: Абрамовский Иван (abhome@atnet.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает bocha

Добрый день, Абрамовский Иван!
смотри HKEY_CLASSES_ROOT\TypeLib\{00025E01-0000-0000-C000-000000000046}

Ответ отправлен: 02.06.2004, 06:07
Отправитель: bocha


 Вопрос № 1669

Здравствуйте Эксперты!Если нужно считать текст из файла ,то как то нужно ли в конце файла ставить точку,end и т.д. или EOF(конец файла)определяеться автоматически



Вопрос отправлен: 01.06.2004, 22:43
Отправитель: Алексей (formica@ua.fm)

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Приветствую Вас, Алексей!
Не совсем понял вопрос, но суть чтения из файла таков: читаешь пока читается.

Ответ отправлен: 02.06.2004, 08:44
Отправитель: vitya


Отвечает CrackLab

Здравствуйте, Алексей!
Есть функция eof которая возвращает true или false в зависимости от того, достигнут ли конец файла или нет. Обычно используют такую конструкцию:
while (!eof(filehandle))
{
// Ваши действия
}
Или же можете получить размер файла и контролировать чтение из файла с учетом размера файла.

Ответ отправлен: 01.06.2004, 23:02
Отправитель: CrackLab


Отвечает barsik

Приветствую Вас, Алексей
определяеться автоматически


Ответ отправлен: 03.06.2004, 00:22
Отправитель: barsik


 Вопрос № 1670

Здравствуйте эксперты.
Вот получил ответ от эксперта bocha:
HKEY_CLASSES_ROOTTypeLib{00025E01-0000-0000-C000-000000000046}
А можно подробнее че это такое, и как это сделать?
Заранее благодарен за ответ(ы)
Абрамовский Иван.



Вопрос отправлен: 02.06.2004, 14:07
Отправитель: Абрамовский Иван (abhome@atnet.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает bocha

Добрый день, Абрамовский Иван!
посмотри у себя ключ реестра HKEY_CLASSES_ROOT\TypeLib\{00025E01-0000-0000-C000-000000000046}
, в нем прописаны библиотеки DAO

Ответ отправлен: 03.06.2004, 05:57
Отправитель: bocha


 Вопрос № 1671

Доброго здоровья :)
У меня 2 вопроса (в порядке уменьшения значимости):
1. Возможно ли при создании массива указателей на класс с помощью new (напр. см. прил.) определённой переменной задавать разные значения, которые по определённому алгоритму выбирал бы сам конструктор (сам алгоритм не принципиален - это может быть и проостой инкремент для int). Я в одной книжке (не моей к сожалению) читал, что в определении класса можно записать что-то вроде ... operator new[](...), но что конкретно там писать я не помню. Т.е. нужно, что бы конструктор сам присваивал этой переменной значение.
2. Может быть кто-то из вас знает (пользуется) редактором, который бы мог делать всё тоже самое что и стандартная борландовская ИДЕшка (я имею ввиду ИДЕ от Си-Билдера), но к которой можно было бы без лишнего гемора подключать к.-либо другие библиотеки. Под словами "без лишнего гемора" следует понимать, что я в настройках прорписываю какие библиотеки нужно линковать всегда. Ну и уж совсем было бы круто, что б ентот редактор позволял сохранять различные профили для этих самых библиотек, а при создании нового проекта спрашивал какой профиль я хочу использовать. Это нуно, например, если я хочу поюзать разные GUI-библиотечки (OWL, wxWindows, etc.) или ещё что-нибудь в этом роде.


Приложение:


Вопрос отправлен: 02.06.2004, 14:52
Отправитель: h@Lt

[Следующий вопрос >>] [Список вопросов]

Отвечает bocha

Доброе время суток, h@Lt!
//1//
/*конструкторы для того и существуют, чтобы присваивать начальные значения
перегружать операторы new и new[], конечно можно, но в большинстве задач в этом нет необходимости
для того, чтобы пользоваться оператором new[], класс должен иметь открытый конструктор без аргументов,
если не объявлять конструкторы вообще, то компилятор автоматически создает конструктор по умолчанию,
и объекты можно будет создавать оператором new[], однако если создать хоть один конструктор,
то конструктор по умолчанию будет отдыхать
для вашей задачи можно сделать например так:*/ //

class TMyClass{
static int gen_id;//она общая для всех экземпляров
const int ID;
int my_data;
public:
TMyClass():ID(gen_id++), my_data(gen_id){
cout << ' ' << my_data;
}
};
int TMyClass::gen_id=0;//

/*теперь у каждого созданного экземпляра класса будет свое уникальное
(в рамках исполняемой программы) знечение ID, и никакой перегрзки операторов new
*/
int main()
{
TMyClass **p = new TMyClass*[100];/*создается масив указателей
значение gen_id как было равно нулю,
так и осталось равно нулю, Вы,похоже, несколько
путаете указатель на массив и массив указателей.
В случае создания массива указателей никаких объектов
автоматически не создается, да и употребляемый вами
термин "указатель на класс", по моему, не корректен
*/
TMyClass *o = new TMyClass[100];/*а вот тут создается массив объектов,
со значениями ID от 0 до 99 и в последствии при генерации объектов данного типа
их ID будут начинаться со 100
*/
TMyClass t = o[1];/*а вот тут заложена мина
т.к. небыло создано конструктора копий, то используется конструктор по умолчанию
gen_id не увеличивается, и используется побитовое копирование и t.ID будет равно 1,
ID теряет уникальность.
Для большинства случаев, при создании нового экземпляра подобного класса,
это не то, что нужно. Как правило необходимо копирование данных, содержащихся
в других полях класса, а уникальный ID, должен оставаться уникальным,
поэтому конструктор копий TMyClass(const TMyClass& t)
т.ж. необходимо перегружать, либо объявлять его как закрытый
перегрузить его в даном случае можно например так:
TmyClass::TMyClass(const TMyClass& t):ID(gen_id++), my_data(t.my_data){}
Еще одна мина в отсутствие перегруженого оператора присваивания,
который в данном случае очевидно должен иметь вид
TMyClass& TMyClass::operator=(const TMyClass& t){my_data = t.my_data;}
или быть объявлен закрытым иначе компилятор как и в случае с конструктором копий
предоставит свой, и сделает не так как Вы хотели, и в следующей строке ID опять
теряет свою уникальность
*/
p[0] = p[3];//p[0].ID == 3 а не 0
delete[] o;
cout << endl << endl;
for(int i =0; i < 100;i++){//ну коль создали массив указателей, его необходимо как-то использоать
p[i] = new TMyClass[i+1];//каждый указатель указывает на массив из i+1 экземпляров TMyClass
cout << endl;
}
for(i=0; i < 100; i++)
delete[] p[i];//не забывайте уничтожать все объекты после их создания оператором new
delete[] p;
return 0;
}//

//2//
/*С билдером я почти не знаком, т.к. среда слишком тяжела и глючна (одному моему знакомому,
в прошлом году пришлось работать с VC6SE на 486+16+вынь95, правда, при сборке-отладке комп тормозил,
а о работе под музыку пришлось на время забыть и MSDN ставить вручную, попробуй с билдером на
такую конфигурацию залезть, так, что при упоминании о билдере мне теперь всегда вспоминается
анекдот "Батьку, и у кринку нэ лезэ!!!"), но, по-моему, там (в билдере) можно создавать собственные
шаблоны проекта, в которых, в том числе, указываются и подключаемые по умолчанию для данного шаблона
библиотеки*/

Ответ отправлен: 03.06.2004, 16:33
Отправитель: bocha


Отвечает CrackLab

Приветствую Вас, h@Lt!
По поводу первого вопроса. Вообще невозможно инициализировать динамически создаваемый массив объектов. Но вы можете создать конструктор без параметров, который будет решать какие начальные значения установить создаваемому объекту.
Вот пример с инкрементом:
int globalvar = 0;
class TMyClass
{
public:
int i;
__fastcall TMyClass() { i = globalvar; globalvar++; };
};
и потом:
TMyClass *foo = new TMyClass[3];
Теперь у нас будет 3 объекта, значения i которых будут соотвественно равны 0, 1 и 2.

Ответ отправлен: 02.06.2004, 15:42
Отправитель: CrackLab



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (21)
C / C++ (14)
Builder / Delphi (15)
Pascal (19)
Basic / VBA (2)
Java / JavaScript (4)
PHP (12)
Криптография (7)
WinAPI (9)
Радиоэлектроника (9)
Пользователю
Windows 95/98/Me (34)
Windows NT/2000/XP (50)
"Железо" (30)
Поиск информации (16)
Администратору
Windows NT/2000/XP (23)
Linux / Unix (9)
Юристу
Гражданское право (12)
Семейное право (9)
Трудовое право (12)
КоАП (8)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное