Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > property в BC 3.1


Автор: AlexDon 29.6.2006, 17:05
Пишу программу на BC 3.1 под DOS. Заранее перевожу процессор в так нзываемый "unreal mode", то есть через регистр fs (gs) я могу адресовать память свыше 1Мб, типа (на ASM)
.386
 mov eax,index  ; index>0x100000
 mov fs:[eax],val
 ; или
 mov val,fs:[eax]
 ...
 На базе этого дела хочу создать класс для обслуживания массива такой памяти, который позволял бы что-то вроде этого:
class My_Mas {
...
};

My_Mas mm(30);
int a = mm[4];
mm[2] = a+3;

 Подскажите, кто может, какую-нибуть идею.
  

Автор: bel_nikita 29.6.2006, 17:08
Код

  My_Mas& operator [](int Num)
  {
    ...
    return *this;
  }
 

Автор: MAKCim 29.6.2006, 17:13
Цитата

My_Mas& operator [](int Num)
  {
    ...
    return *this;
  }

скорее
Код

int& operator [](int Num)
  {
   ...
   return <что-то>
  }
 

Автор: AlexDon 30.6.2006, 12:05
Цитата(MAKCim @ 29.6.2006,  17:13)
Цитата

My_Mas& operator [](int Num)
  {
    ...
    return *this;
  }

скорее
Код

int& operator [](int Num)
  {
   ...
   return <что-то>
  }

 То, что Вы написали, обслуживает правильно только a = mm[4], 
 а как быть с mm[4] = a ???
 

Автор: Daevaorn 30.6.2006, 13:23
Цитата(AlexDon @  30.6.2006,  13:05 Найти цитируемый пост)
То, что Вы написали, обслуживает правильно только a = mm[4], 
 а как быть с mm[4] = a ???

И так тоже работает 

Автор: AlexDon 30.6.2006, 14:09
Цитата(Daevaorn @ 30.6.2006,  13:23)
Цитата(AlexDon @  30.6.2006,  13:05 Найти цитируемый пост)
То, что Вы написали, обслуживает правильно только a = mm[4], 
 а как быть с mm[4] = a ???

И так тоже работает

Не работает, так как mm[4] = a транслятор преобразует во что-то такое:

  mov es,dx
  mov bx,ax
  mov es:[bx],cx

  а мне нужно:

  .386
  mov eax,100000h
  add eax,4*2
  mov fs:[eax],cx
 

Автор: Daevaorn 30.6.2006, 16:44
AlexDon, 
хе. ну завтавить компилятор генерировать именно такой код, ты не можешь. Но такая конструкция вполне работоспособна с точки зрения С++ 

Автор: MAKCim 30.6.2006, 17:05
Цитата

а мне нужно:

  .386
  mov eax,100000h
  add eax,4*2
  mov fs:[eax],cx

пишите asm-вставки как Вам нужно  smile  

Автор: AlexDon 3.7.2006, 11:19
Цитата(MAKCim @ 30.6.2006,  17:05)
Цитата

а мне нужно:

  .386
  mov eax,100000h
  add eax,4*2
  mov fs:[eax],cx

пишите asm-вставки как Вам нужно  smile

Дело в том, что когда я перезагружаю оператор [], то в качестве параметра я получаю только индекс, но не значение, которое по этому индексу нужно записать, поэтому внутри этого оператора моя вставка asm бессмыслена. 

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