Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как объявить свойство доступ по индексу, По аналогии со свойством TList::items 
V
    Опции темы
Anikmar
Дата 22.4.2007, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



В стандартном классе vcl TList есть свойство items.
В него передается индекс и получается адрес элемента

Я не могу понять как это объявить - у меня есть свой класс, который хранит список объектов моего типа (не чисто массив, а с неким функционалом). Доступ к элементу у меня при помощи метода GetItem(Index). А как сделать этот же доступ через квадратные скобки?
Полез в исходники vcl - а там во-первых все на паскале, а во-вторых я вообще этого свойства не нашел. Может исходники у меня не полные, либо искатель из меня фиговый.


PM MAIL ICQ   Вверх
Klin
Дата 22.4.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А что ты имеешь ввиду, не чисто массив, а с функциональностями? 


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
fish9370
Дата 22.4.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Anikmar @ 22.4.2007,  13:12)
В стандартном классе vcl TList есть свойство items.
В него передается индекс и получается адрес элемента

Я не могу понять как это объявить - у меня есть свой класс, который хранит список объектов моего типа (не чисто массив, а с неким функционалом). Доступ к элементу у меня при помощи метода GetItem(Index). А как сделать этот же доступ через квадратные скобки?
Полез в исходники vcl - а там во-первых все на паскале, а во-вторых я вообще этого свойства не нашел. Может исходники у меня не полные, либо искатель из меня фиговый.

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

в твоем же случае нужно перегрузить operator[] и собственно все.. выглядит примерно так:

Код

Element* operator[](int index)
{
       //вычисление адреса  
       return addr;
}


Это сообщение отредактировал(а) fish9370 - 22.4.2007, 19:00


--------------------
undefined
PM MAIL WWW ICQ   Вверх
Anikmar
Дата 22.4.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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




Цитата(fish9370 @  22.4.2007,  18:25 Найти цитируемый пост)
в твоем же случае нужно перегрузить operator[] и собственно все.. 

Нет, мне не это нужно.
Перегружать оператор - это на один уровень ниже. В данном случае это не нужно.

Все оказалось просто: надо было это свойство объявлять не через класс эксполорер. Сначала создаются методы Get и Set с параметром int, а потом вручную правится свойство и получается так:
Код

    TvrClass* GetTvr(int pIndex);
    __property TvrClass* Tvrs[int Index]  = { read=GetTvr };

А если перегружать скобки, то синтаксис бы усложнился - мне вариант, использованный в Tlist больше понравился. Я просто неврубился как его реализовать.


Цитата(fish9370 @  22.4.2007,  18:25 Найти цитируемый пост)
как память выделяешь, как хранишь элементы?

Я использую стандартный Tlist - у меня массив не более 100 элементов, мне нужно другое. У меня некие универсальные объекты хранения записей таблиц БД - Получил запись из БД, потом надо с ней что-то делать, об изменениях записать в Лог и т.п.
Все это реализовано в базовом классе, от которого наследники уже переопределяют нужные виртальные методы.
А этот класс - массив таких записей (для построения интерфейса). Например некий документ со строками. Не будешь же его редактировать прямо в гриде - вдруг пользователь нажмет отмену. А держать открытой транзакцию - это плохо.
Вот и понадобился универсальный список строк

Пожалуй спасибо всем за участие - тему помечу как решенную.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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