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

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


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

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

Выпуск № 500
от 20.08.2006, 21:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 361, Экспертов: 59
В номере:Вопросов: 6, Ответов: 13


Вопрос № 52141: Dobraye vrema sutok umena problema pri obyedeneniye Vot umena 3 Modula 1.Funkciya 2.Main 3.Funkciya ispolzuetsa static i exteren ya xocu obyedenit v odin exe fayli pri kompilirovaniye ne obyedenaya ix v odin modul p...
Вопрос № 52178: В C malloc(), calloc(), delete() и realloc(); В C++ new ..., new ...[], delete .... Есть ли аналог realloc в C++? Или в C++ по-любому надо пользоваться этой C-функцией?...
Вопрос № 52181: Как задать набор TVarRec? В Дельфи если нужно скопировать записи из одной таблицы в другую делается так: Table1.InsertRecord([Table2Pole1.AsString,Table2Pole2.AsString,Table2Pole3.AsString],3); То есть указываются сами поля и их количеств...
Вопрос № 52193: я установил Microsoft Visual C++ 2005 Express Edition. В меню FIle->New->Project... есть несколько групп шаблонов: 1. CLR: Class Library, CLR Empty Project, CLR Console Aalication, Windows Form Application 2. Win32: Win32 Console A...
Вопрос № 52215: Здравствуйте. Я пишу программку и так получилось , что мне удобней сделать так: Из функции parent() вызывается child(), потом из child() вызывается parent() и т. д. И так они вызывают одна другую много раз. Вопрос такой: есть ли ограничения на колич...
Вопрос № 52222: Здравствуйте уважаемые эксперты! У маня возникла проблема, вернее дефицит знаний. Используя ADO я организовывал связь с SQL сервером и MS ACCESS. Спомощью _ConnectoinPtr я организовывал связь и производил все операции с БД (SELECT, UPDATE...

Вопрос № 52.141
Dobraye vrema sutok umena problema pri obyedeneniye

Vot umena 3 Modula
1.Funkciya
2.Main
3.Funkciya

ispolzuetsa static i exteren
ya xocu obyedenit v odin exe fayli pri kompilirovaniye ne obyedenaya ix v odin modul pojalusta podskajite kak eto sdelat Ispolzuya C++Builder 6
Ocen nujna pojalusta pomagite
Отправлен: 15.08.2006, 01:17
Вопрос задал: Talibov Natik Axmedovic (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mihasic
Здравствуйте, Talibov Natik Axmedovic!
Ну, вообще по стандарту языка, чтобы скрыть имя функции в пределах одного модуля, нужно использовать спецификатор static. А чтобы сделать имя "уникальным" можно еще использовать пространства имен (namespace). Для доступности имен в разых файлах рекомендуется использовать заголовочные файлы (те, что инклюдятся и имеют расширения .h, .hpp).
Ответ отправил: Mihasic (статус: 5-ый класс)
Ответ отправлен: 15.08.2006, 11:28


Вопрос № 52.178
В C malloc(), calloc(), delete() и realloc();
В C++ new ..., new ...[], delete ....
Есть ли аналог realloc в C++? Или в C++ по-любому надо пользоваться этой C-функцией?
Отправлен: 15.08.2006, 11:12
Вопрос задал: Tundravarg (статус: 1-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mihasic
Здравствуйте, Tundravarg!
Нет, аналога нету (по крайней мере в стандарте, который в Visual C++).
Главное, это при использовании функций C, не смешивать их с операторами C++.
Неправильный пример:
void *p = malloc(100);
delete p;

И вообще, стоит помнить, что иногда операторы new и delete могут быть перегруженными.
Ответ отправил: Mihasic (статус: 5-ый класс)
Ответ отправлен: 15.08.2006, 11:33

Отвечает: Хватов Сергей
Здравствуйте, Tundravarg!

Такого аналога нет из идеологических соображений. При увеличении размера динамического объекта его возможно придётся двигать, а это небезопасно, если где-либо ещё на него есть ссылки.
Ответ отправил: Хватов Сергей (статус: 1-ый класс)
Ответ отправлен: 15.08.2006, 11:36

Отвечает: Шинтяков Дмитрий Васильевич / Ratson
Конечно же, в С++ есть и С-шные функции для работы с памятью, но использовать их не рекомендуется (так как есть много лучше)

Кроме того, категорически нельзя мешать в одной программе C и C++ стили работы с памятью.

Если вым необходим массив изменяемого размера, пользуйтесь шаблоном vector
Ответ отправил: Шинтяков Дмитрий Васильевич / Ratson (статус: 1-ый класс)
Ответ отправлен: 15.08.2006, 12:48

Отвечает: Www2
Здравствуйте, Tundravarg!

malloc, calloc, realloc и free хорошо подходят для массивов структур или скалярных типов. Можно использовать и для объектов, у которых нет перегружаемых и виртуальных функций и нет конструкторов, деструкторов, но не советую.

new и delete лучше использовать для объектов, они автоматически считают размер блока памяти, необходимый для размещения объектов и вызывают их конструкторы/деструкторы.
Ответ отправил: Www2 (статус: 3-ий класс)
Ответ отправлен: 16.08.2006, 06:36


Вопрос № 52.181
Как задать набор TVarRec?
В Дельфи если нужно скопировать записи из одной таблицы в другую делается так:
Table1.InsertRecord([Table2Pole1.AsString,Table2Pole2.AsString,Table2Pole3.AsString],3);
То есть указываются сами поля и их количество.
Нужно сделать тоже самое в СBuilder-e.
Проблема в том, что я не знаю как задать набор записей. Квадратные скобки не подходят. Как это делается?

Приложение:

Отправлен: 15.08.2006, 11:21
Вопрос задал: Rusland (статус: Специалист)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Santana
Здравствуйте, Rusland!
Вот пример из хелпа

This statement appends a record to the Customer dataset. Note that Nulls are entered for some of the values, but are not required for missing values at the end of the array argument.

Customer->InsertRecord(ARRAYOFCONST((CustNoEdit->Text,CoNameEdit->Text,AddrEdit->Text, Null, Null, Null, Null, Null, Null,DiscountEdit->Text)));
Ответ отправил: Santana (статус: 5-ый класс)
Ответ отправлен: 15.08.2006, 13:15
Оценка за ответ: 5
Комментарий оценки:
Спасибо, я уже нашел.


Вопрос № 52.193
я установил Microsoft Visual C++ 2005 Express Edition. В меню FIle->New->Project... есть несколько групп шаблонов:
1. CLR: Class Library, CLR Empty Project, CLR Console Aalication, Windows Form Application

2. Win32: Win32 Console Application

3. General: Empty Project, Makefile Project

я создаю Win32 Console Application (пустое приложение, просто вывод консоли и закрытие), компилирую - все проходит замечательно. Но если запустить полученную прогу на другом компе, где нет студии, появляется ошибка: "Не найдена библиотека MSVCR80D.dll"

ВОПРОСЫ:
1. где я могу скачать дополнительные шаблоны к этой студии?

2. я хочу написать такой код: см. приложение

но компиляция не проходит - есть сообщения об ошибках :(

как откомпилировать такой код? и возможно ли это сделать в студии? или нужен другой компилятор?

Приложение:

Отправлен: 15.08.2006, 12:31
Вопрос задал: Vizli (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mihasic
Здравствуйте, Wizli!
Шаблонов обычно и так хватает, но можно создать свои (последний раз с этим игрался еще в 6-й студии, опэтому не знаю, как это делается в 8-й), а по поводу скачать - можно поискать в гугле.
Программа наверное не компилируется из-за того, что не определена EXIT_SUCCESS, сообщения об ошибках компиляции можно посмотреть в таск-листе (по крайней мере так он называется в студии 7.1 и для отображения и наоборот - Ctrl+Alt+K, или через меню View).
Чтобы работала программа, определите EXIT_SUCCESS где-то в начале:
#define EXIT_SUCCESS 0
(сообщения об ошибках надо читать!)

MSVCR80D.dll - дэбаг версия сишной библиотеки (лучше компилировать под релиз-версию).
Для стыковки со статической библиотекой (опять же на примере студии 7.1), зайдите в Project-><имя проекта> Properties... (обічно єто последний пункт меню). После на странице С/С++->Code Generation в поле Runtime Library выберите что-то без слова DLL (ваш выбор зависит от типа сборки - Дэбаг или Релиз).
Если Вам статическая стыковка не подходит, то поступайте, как рекомендует Майкрософт (правда это для пользовательских библиотек) - поместите ДЛЛ вместе с проектом в одну папку на другой машине.
Ответ отправил: Mihasic (статус: 5-ый класс)
Ответ отправлен: 15.08.2006, 13:14

Отвечает: Шинтяков Дмитрий Васильевич / Ratson
Хоть бы сказали, на что ругается...
По поводу MSVCR80D.dll - это глюки. Похоже, в вашем дистрибутиве по какой-то случайности не оказалось данной библиотеки.
Попробуйте найти её отдельно и положить куда-нибудь, где она будет видна всем приложениям.

По поводу кода: iostream.h это legacy header, использование которого слегка discouraged ^_^

как надо - см. в приложении. Насчёт EXIT_SUCCESS - вы уверены, что она есть в stdlib.h? Сейчас нет С под рукой, не проверить.
накрайняк, задайте сами.

Приложение:

Ответ отправил: Шинтяков Дмитрий Васильевич / Ratson (статус: 1-ый класс)
Ответ отправлен: 15.08.2006, 19:45
Оценка за ответ: 5


Вопрос № 52.215
Здравствуйте. Я пишу программку и так получилось , что мне удобней сделать так: Из функции parent() вызывается child(), потом из child() вызывается parent() и т. д. И так они вызывают одна другую много раз. Вопрос такой: есть ли ограничения на количество таких вызовов, или.
если спросить по-другому, это рекурсия или нет? Спасибо заранее.
Отправлен: 15.08.2006, 17:09
Вопрос задал: Lameruga (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Mihasic
Здравствуйте, Lameruga!
1. Ограничение есть, называется "размер стека".
2. Да, это рекурсия:
Реку́рсия — метод определения класса объектов или методов предварительным заданием одного или нескольких (обычно простых) его базовых случаев или методов, а затем заданием на их основе правила построения определяемого класса.

Просто следи за глубиной вызовов (если их действительно очень много). Можно если что попробовать развернуть все в цикл.
Ответ отправил: Mihasic (статус: 5-ый класс)
Ответ отправлен: 15.08.2006, 17:22
Оценка за ответ: 5
Комментарий оценки:
Спасибо.

Отвечает: gitter
Здравствуйте, Lameruga!
Да, это, в каком-то смысле, рекурсия. Ограничений на вызов таких функций нет никаких (кроме ограничений наложенных алгоритмом).
Если алгоритм, по которому эти функции вызывают друг-друга, предусматривает достаточно определенные условия выхода из этих функций, то ничего страшного здесь нет.
Но, если во время выполнения программы происходит зацикливание (переполнение), тогда алгоритм работы этих функций необходимо пересмотреть.

Удачи!
Ответ отправил: gitter (статус: Студент)
Ответ отправлен: 15.08.2006, 17:22
Оценка за ответ: 5
Комментарий оценки:
Спасибо.

Отвечает: EPDSota
Здравствуйте, Lameruga!

1. Под ДОС ограничение есть:
Количество вызовов максимально возможное = Размер стека поделить на 2...
2. Да, рекурсия...

---------
Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 15.08.2006, 18:05
Оценка за ответ: 5
Комментарий оценки:
Спасибо.

Отвечает: Шинтяков Дмитрий Васильевич / Ratson
Всё-таки постановка вопроса неправильная.
>есть ли ограничения на количество таких вызовов, или.
Да, ограничение есть. Аргументы, с корорыми вызывается функция, а также локальные переменные, объявленные в её теле, размещаются в стеке.
Каждый последующий вложенный вызов требует выделения дополнительного места в стеке.

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

Обычно объёма стека хватает, а вообще его можно менять.

>если спросить по-другому, это рекурсия или нет?
Это не "спросить по-другому", а совсем другой вопрос.
Ответ: Да, это называется рекурсией.
Ответ отправил: Шинтяков Дмитрий Васильевич / Ratson (статус: 1-ый класс)
Ответ отправлен: 15.08.2006, 19:52
Оценка за ответ: 5
Комментарий оценки:
Спасибо.


Вопрос № 52.222
Здравствуйте уважаемые эксперты!
У маня возникла проблема, вернее дефицит знаний.
Используя ADO я организовывал связь с SQL сервером и MS ACCESS.
Спомощью _ConnectoinPtr я организовывал связь и производил все операции с БД (SELECT, UPDATE, INSERT и т.д.)
Но теперь возникла необходимость организовавыть связь с БД ORACLE.
Не подскажите какие файлы заголовка подключить и как вообще организовать connection. Привожу куски скрипта.

Приложение:

Отправлен: 15.08.2006, 18:50
Вопрос задал: Nagumanov Ruslan (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: gitter
Здравствуйте, Nagumanov Ruslan!
Зайдите сюда
здесь Вы увидете примеры строк подключения к любой базе данных, в т.ч. к Oracle'у

Удачи!
Ответ отправил: gitter (статус: Студент)
Ответ отправлен: 15.08.2006, 19:00


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное