Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > перегруз оператора []


Автор: DonPager 16.1.2008, 14:05
есть класс:
Код

class TAuthTable
{
private:    // User declarations
  int fMaxUserId;
  AnsiString fIniFileName;
  TList *fUsers;
  TSMPP_User_acc *fUser;
  int getMaxUserId(){return fMaxUserId;};
  int getUserCnt(){return fUsers->Count;};
  TSMPP_User_acc* getUser(int id);

public:        // User declarations
  TSMPP_User_acc*  operator[] (int id) {return getUser(id);};

  __property int UserCount = {read = getUserCnt};
  __property int MaxUsers = {read = getMaxUserId};
  TAuthTable(AnsiString IniFileName);
  ~TAuthTable();
  bool AddUser(TSMPP_User_acc *NewUser);
  bool RemoveUser(int id);
};

вопрос в том правильно ли я перегружаю оператор []
потому как на такую запись:
Код
 TSMPP_User_acc *xUser = AuthList[i]; 

выдаёт ошибку несоответствия типов

Автор: maxim1000 16.1.2008, 16:07
а как объявлен AuthList?

Автор: DonPager 16.1.2008, 16:11
как (TAuthTable *)

Автор: Fazil6 16.1.2008, 16:12
<сори... переработал...>

Добавлено через 2 минуты и 43 секунды
Цитата(DonPager @  16.1.2008,  15:11 Найти цитируемый пост)
как (TAuthTable *)

а используешь как TAuthTable

Добавлено через 6 минут и 34 секунды
Цитата(DonPager @  16.1.2008,  13:05 Найти цитируемый пост)
TSMPP_User_acc* getUser(int id);

что за функция ?

Автор: DonPager 16.1.2008, 16:35
ну приведу пример реализации
Код

TSMPP_User_acc* TAuthTable::getUser(int id)
{
  TSMPP_User_acc* res = (TSMPP_User_acc*)fUsers->Items[id];
  return res;
}


но имхо описаловки достачно

Автор: DonPager 16.1.2008, 16:55
вобщем х. с ним с оператором ... smile
сделал так
Код

  __property TSMPP_User_acc* Items[int id] = {read=getUser};

и всё ништяк 

Автор: ama_kid 16.1.2008, 17:18
Цитата(DonPager @  16.1.2008,  16:55 Найти цитируемый пост)
вобщем х. с ним с оператором ...
ну тебе же Fazil6 вроде правильно указал путь: надо было просто написать типо такого:
Код
TSMPP_User_acc *xUser = (*AuthList)[i];

Автор: DonPager 17.1.2008, 11:01
[QUOTE=
Код
TSMPP_User_acc *xUser = (*AuthList)[i];

вобщем мне то хотелось писать именно AuthList[i],
но так и не догнал как надо было описать перегрузку, чтобы так  написать

Автор: ama_kid 17.1.2008, 11:18
Цитата(DonPager @  17.1.2008,  11:01 Найти цитируемый пост)
вобщем мне то хотелось писать именно AuthList[i]
Тогда надо было его и объявлять как "объект", а не "ссылка на объект", т.е.
Код

TAuthTable AuthList;


Автор: DonPager 17.1.2008, 12:03
ama_kid, Вобщем я так понял перегрузку для указателя сделать нельзя ?

Автор: ama_kid 17.1.2008, 12:14
Цитата(DonPager @  17.1.2008,  12:03 Найти цитируемый пост)
я так понял перегрузку для указателя сделать нельзя ? 
вообще-то перегрузка оператора делается для типа. Переменную типа ты можешь объявить объектом, либо указателем на объект и в зависимости от того как ты объявил  - соответствующим образом обращаться к выделенному участку памяти - либо по имени (в случае объекта), либо разыменовыванием указателя... тут вроде как даже сам факт наличия перегрузки оператора ни при чем...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)