Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Buttons 
:(
    Опции темы
Imidazol
Дата 20.9.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 14.5.2007

Репутация: нет
Всего: нет



почему я могу написать так:

btn[i] = new TButton;

 и не могу сделать то же самое со SpeedButton?

btn[i] = new TSpeedButton;
PM MAIL   Вверх
SenkraD
Дата 20.9.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Imidazol, нужно так, к примеру:
Код

const int BUTTONS_ARRAY_SIZE = 10;
TButton *pButtonsArray[BUTTONS_ARRAY_SIZE];
for(int i = 0; i < BUTTONS_ARRAY_SIZE; i ++)
{
    pButtonsArray[i] = new TButton(this/*можно NULL, но потом придётся самому руками удалять (я обычно так и делаю - сам удаляю)*/);
    //...
}

// 


Это сообщение отредактировал(а) SenkraD - 20.9.2007, 17:39


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Sharkfire
Дата 20.9.2007, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 30.11.2006
Где: Одесса

Репутация: 2
Всего: 2



Очень мало информации...
если у тебя массив обычных кнопок... то их и надо создавать = new TButton(...)
а если массив TSpeedButton то и соотеветсвенно = new TSpeedButton(...);
Если я правильно понял! 
PM MAIL ICQ   Вверх
SenkraD
Дата 20.9.2007, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Sharkfire, Imidazol, так как написано можно сделать для этого нужно написать класс производный от TButton, к примеру, и перегрузить буферизированные операторы new и delete и определить конструктор по умолчания.

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

Теперь почему сделанно именно так (я так считаю):
 1. Почему нет конструктора по умолчанию?
     - Это сделано для защиты.  Заставляя передать вас компонент "овнер", они гарантируют освобождение памяти,
        которую занял ваш "ран-тайм" контрол - овнер его сам удалит когда будет умирать (хотя никто не запрещает
        передать NULL, но потом необхожимо саммому удалять созданный контрол). 
     - Некоторые обьекты не могут быть созданые без информации из вне - может быть этот TComponent *Owner
       используется ещё для какой-то другой инициализации; и не передав валидного владельца вы можете ограничить
       его функциональность
 2. Почему для создания массива кнопок, к примеру, нужно было писать как я в примере?
     - Это вытекает из-то что у класса нет конструктора по умолчанию (по крайней мере, открытого) 

Да, к слову, а вот почему на моё мнение нельзя создать обьекты VCL'я в стеке. Это классы GUI, которые кушают немало и хранить их в стеке не очень хорошая идея, поэтому это ещё можно воспринимать как ухищорения для ускорения (прикиньте как бы там стек закручивался-раскручивался) и предостережения от "стек оверфлоу" - он кажись поменьше будет чем куча. Плюс есть куча полей-указателей (Parent, Owner, ...), а хранить указатели на адреса в стеке - самоубийство (они же не постояные);  а без этих полей, местами, никак, по этому без них будет плохо

P.S. Кто знает где я ошибся,  поправьте пожалуйста!

Это сообщение отредактировал(а) SenkraD - 21.9.2007, 07:58


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Imidazol
Дата 24.9.2007, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 14.5.2007

Репутация: нет
Всего: нет



Спасибо, с вашей помощью  разобрался.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0932 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.