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

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


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


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

Выпуск № 342
от 30.08.2003, 17:00

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


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

Gibbel
Статус: Профессиональный
Общий рейтинг: 107.39
URL: Savage Metal Club - жизнь в стиле рок-н-ролл
Телефон: +7 901 710 3146
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.05
[Подробней >>]
Avl2k
Статус: Профессиональный
Общий рейтинг: 125.7
[Подробней >>]
 
Yuri Gordienko
Статус: Профессиональный
Общий рейтинг: 117.97
URL: Досконально о С++, оптимизация программ, советы
[Подробней >>]
BOLT
Статус: Профессиональный
Общий рейтинг: 170.27
URL: Начинающему программитсу: софт, примеры, документация, Assembler, C & C++.
Телефон: Три раза АУ!
[Подробней >>]
Morgion
Статус: Доверительный
Общий рейтинг: 108.56
[Подробней >>]
 
Marouder
Статус: Опытный
Общий рейтинг: 115.58
URL: Первый Хабаровский Форум
Телефон: (4212) 21-93-65
[Подробней >>]


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

Вопрос № 1031. Здравствуйте Експерты! Мне понадобилось создать "универсальный масив". То есть масив тип к... (ответов: 6)
Вопрос № 1032. Здравствуйте! Мне нужно создать окно с двух частей. Идея была такая. Создаеть главное окно, потом на... (ответов: 3)

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


 Вопрос № 1031

Здравствуйте Експерты!
Мне понадобилось создать "универсальный масив".
То есть масив тип которого заранее неизвестен.
Далее пользователь задает размер одного елемента.
Я пробовал это сделать примерно так.
void * data;
Потом data=(void*)malloc(n*elsize).
Но y void * не определен размер. То как бить.
Помогите плз. Очень надо.



Вопрос отправлен: 26.08.2003, 21:14
Отправитель: x3m

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

Отвечает Gibbel

Приветствую Вас, x3m!
А потом, там где тебе надо получить какой-либо i-тый элемент, делаешь так.
result=*(data+i*elsize);


Ответ отправлен: 27.08.2003, 10:43
Отправитель: Gibbel


Отвечает vitya

Приветствую Вас, x3m!
если вы не против использование c++, то я бы вам посоветовал template класс создать.
если же вам обязательно надо работать с C, тогда в функциях инициализации, просто передавайте размер элемента. BTW, размер void * вполне определен и равен размеру указателя - 4 байта в защищенном режиме ix86

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


Отвечает Avl2k

Здравствуйте, x3m!
Вообщ-то все это уже написано в STL (см. класс std::vector), но если очень хочется самому, то надо использовать template'ы - ои именно для этого и предназначены.
Пример:
// STL
#include <vector>
using namespace std;
int main()
{
vector<int> v( 2 );
v[0] = 10;
v[1] = 20;
vector<double> v2;
v2.push_back( 7.62 );
return 0;
}
// ручками
#include <crtdbg.h>
template<class T>
class MyVec
{
public:
MyVec( int size ) { Alloc( size ); }
MyVec( const MyVec& v )
{ Alloc( v.m_size ); memcpy( m_data, v.m_data, sizeof( T ) * m_size ); }
~MyVec() { delete[] m_data; }
MyVec& operator = ( const MyVec& v )
{
if( &v != this ) { this->~MyVec(); new(this)MyVec( v ); }
return *this;
}
T& operator[]( int i ) const { _ASSERT( i >= 0 && i < m_size ); return m_data[i]; }
private:
void Alloc( int size )
{
_ASSERT( size > 0 );
m_size = size; m_data = new T[size];
}
private:
T* m_data;
int m_size;
};
int main()
{
MyVec<int> v( 2 );
v[0] = 10;
v[1] = 20;
return 0;
}
С уважением, Avl2k.

Ответ отправлен: 27.08.2003, 12:12
Отправитель: Avl2k


Отвечает Yuri Gordienko

Здравствуйте, x3m!
Криводи к (char*). Или работай через шаблоны
Успехов


Ответ отправлен: 27.08.2003, 10:16
Отправитель: Yuri Gordienko


Отвечает BOLT

Добрый день, x3m!
Для этого применяются классы. При создании объекта инициализируется массив в конструкторе по запросу пользователя через определенный интерфейс или поумолчанию. Посмотри исходники класса String и ты поймешь как это можно реализовать кодированием.

Да прибудет с тобой Великая Сила!
This message was created by EMan 1.5


Ответ отправлен: 27.08.2003, 14:44
Отправитель: BOLT


Отвечает Morgion

Доброе время суток, x3m!
Пользуйся cpp и шаблонами, либо определи функции доступа, которые будут контролировать соответственно размер и прочую лажу.

Ответ отправлен: 27.08.2003, 15:55
Отправитель: Morgion


 Вопрос № 1032

Здравствуйте!
Мне нужно создать окно с двух частей. Идея была такая.
Создаеть главное окно, потом на него сверху
наложаться другие окна-части. Далее возникли вопросы.
Нужно ли для каждого окна регистрировать свой класс?
Если класс используеться один, то как знать от какого окна
пришло сообщение,ведь они используют одну и туже фн.
обработки сообщений?



Вопрос отправлен: 26.08.2003, 21:15
Отправитель: x3m

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

Отвечает Avl2k

Доброе время суток, x3m!
1) Для каждого окна свой класс - не нужно. Возможно имеет смысл сделать разными классы главного окна и его сhild'ов, если у них будет совершенно разная функциональность.
2) Различать очень просто - у каждого окна есть свой HWND и он приходит в WindowProc первым параметром.
С уважением, Avl2k.

Ответ отправлен: 27.08.2003, 11:50
Отправитель: Avl2k


Отвечает Marouder

Доброе время суток, x3m!
Функцию обработки сообщений можно заменить на другую с помощью SetWindowLong.


Ответ отправлен: 27.08.2003, 10:05
Отправитель: Marouder


Отвечает BOLT

Доброе время суток, x3m!
Каждое окно должно иметь свой класс.

Да прибудет с тобой Великая Сила!
This message was created by EMan 1.5


Ответ отправлен: 27.08.2003, 14:44
Отправитель: BOLT



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (39)
C / C++ (31)
Perl (4)
Builder / Delphi (19)
Pascal (27)
Basic / VBA (8)
Java / JavaScript (8)
PHP (10)
Криптография (9)
WinAPI (17)
Пользователю
Windows 95/98/Me (49)
Windows NT/2000/XP (65)
"Железо" (44)
Поиск информации (24)
Администратору
Windows NT/2000/XP (33)
Linux / Unix (12)
Юристу
Гражданское право (11)
Семейное право (7)
Трудовое право (7)
КоАП (6)

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




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


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

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

В избранное