Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Ishodniki.Ru » Online книги » C++ Builder по шагам Шаг 10 - Списочные классы [TList, оператор dynamic_cast] Списочные классы C++ Builder хранят указатели типа void*, которые могут адресовать любые объекты. Для того, чтобы воспользоваться таким указателем, необходимо выполнить преобразование типа. Преобразования можно выполнить двумя способами - статическим в стиле обычного C++ и динамическим (расширенным ANSI). Последний предпочтительнее по ряду причин. Почему станет понятно из примеров: void __fastcall TForm1::Edit1Change(TObject *Sender) { TEdit* tmpedit=(TEdit*)Sender; Label1->Caption=tmpedit->Text; } Данный код выполняет статическое преобразование из TObject к TEdit. Этот обработчик можно назначить сразу нескольким компонентам TEdit, но только TEdit! При попытке преобразования другого класса программа выдаст исключение на преобразование типов. На практике бывает часто необходимо выполнить преобразование из неизвестного класса. Конечно, можно поставить ловушки - инструкции try...catch, но проще воспользоваться динамическим преобразованием - оператором dynamic_cast. Вот пример его использования, аналогичный предыдущему: void __fastcall TForm1::Edit1Change(TObject *Sender) { TEdit* tmpedit=dynamic_cast<TEdit*>(Sender); if (tmpedit==NULL) return; Label1->Caption=tmpedit->Text; } В угловых скобках указывается целевой класс, а в круглых - аргумент преобразования. При невозможности выполнить преобразование возвращается NULL. Исключение при этом не возникает. После этого теоретического введения можно приступить к рассмотрению одного из представителей списочных классов VCL - класса TList. Вот его свойства и методы:
Опять-таки приведу пример: TList* list; void __fastcall Button1Click(TObject* Sender) { const count=10; list=new TList; list->Capacity=count; for (int i=0;i<count;i++) { TImage* img=new TImage(this); img->Picture->LoadFromFile(IntToStr(i)+".bmp"); list->Add(img); } } void __fastcall Button2Click(TObject* Sender) { Image1=dynamic_cast<TImage*>(list->Items[Edit1->Text->ToIntDef(0)]); } Этот пример создает список изображений и загружает их из файлов "0.bmp"..."9.bmp". Здесь показаны основные манипуляции. В следующем шаге мы рассмотрим список строк TStringList. |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Рейтинги
|