WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Проблема с оператором []

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Проблема с оператором []
afrolov опубликован 31-01-2002 15:55 MSK   Click Here to See the Profile for afrolov   Click Here to Email afrolov  
Порблема в следующем:
Хочу я перегрузить оператор []

Для класса
class Class2
{
.......
vector <Class1*> coeffs;
Class1 operator [] (long index);
.......
}
объекты Class1 создаются динамически
с помощью new
Class1 operator [] (long index);
{
......
return * coeffs[index];
}

void Func1(void)
{
Class2 a;
...
a[1]=1;//И ничего не происходит хотя если
//написать так : *a.coeffs[1]=1; то всё
// работает
//оператор = перегружен для Class1
}

the_moon опубликован 31-01-2002 16:13 MSK     Click Here to See the Profile for the_moon  Click Here to Email the_moon     
Ты вернул копию объекта coeffs а надо бы ссылку на объект
Class1& operator [] (long index);

иначе ты получаешь копию объекта присваеваешь 1 и благополучно уничтожаешь.

Flex Ferrum опубликован 31-01-2002 16:18 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Посмотри внимательно на свой код. Твой оператор возвращает копию объекта находящегося по заданному индексу. Естественно, что все последующие операции ты будешь делать с ней, то есть с копией. Для того, чтобы у тебя работало все правильно перепиши оператор индексирования следующим образом:

Class1& operator[](long index);

То есть твой оператор должен возвращать ссылку на объект, а не его копию.

the_moon опубликован 31-01-2002 17:44 MSK     Click Here to See the Profile for the_moon  Click Here to Email the_moon     
А я вперед успел :)))

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.