Перегрузка оператора приращения cli / c ++ - PullRequest
0 голосов
/ 28 августа 2011

У меня вопрос по поводу перегрузки операторов в среде cli / c ++

static Length^ operator++(Length^ len)
{
   Length^ temp = gcnew Length(len->feet, len->inches);
   ++temp->inches;
   temp->feet += temp->inches/temp->inchesPerFoot;
   temp->inches %= temp->inchesPerFoot;
   return temp;
}

(код взят из книги Ивор Хортон.)

почему мы должны объявить новый объект класса(temp) в куче просто чтобы вернуть?я гуглил информацию о перегрузке, но там на самом деле не так много, и я чувствую себя немного растерянным.

Ответы [ 2 ]

1 голос
/ 28 августа 2011

Это способ перегрузки операторов реализован в .NET.Перегруженный оператор - это статическая функция, которая возвращает новый экземпляр вместо изменения текущего.Следовательно, операторы post и prefix ++ одинаковы.Большая часть информации о перегрузке операторов рассказывает о нативном C ++.Вы можете видеть специфическую информацию .NET, ища примеры C #, например: http://msdn.microsoft.com/en-us/library/aa288467(v=vs.71).aspx .NET GC позволяет создавать много легких новых экземпляров, которые собираются автоматически.Вот почему перегруженные операторы .NET являются более простыми, чем в собственном C ++.

1 голос
/ 28 августа 2011

Да, потому что вы перегружаете POST -инкрементный оператор здесь.Следовательно, исходное значение может много использоваться в коде, копироваться и храниться где-то еще, несмотря на существование нового значения.Пример:

store_length_somewhere( len++ );

Хотя len будет увеличено, исходное значение может быть сохранено функцией где-то еще.Это означает, что вам могут понадобиться два разных значения одновременно.Отсюда создание и возврат нового значения.

...