Перегрузка опер

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Romeo
Капец, кто тебя сделал модератором, ты же разводишь флуд.
Romeo писал(а):Не относись к ПДД, как к панацее. Знавал я таких водителей. Большинство покоятся с миром.
Сранил поезд с самолётом. У них общего только то, что они оба могут служить средством перемещения.
Ты не прав в корне, если ты НЕ относишься к стандарту, как к панацеи. Я в своей команде таких людей просто не держу.
Я бы не хотел работать на ISD. Если ты думаешь, что все мечтают там работать, то ты глубоко ошибаешся.
Он уже существует почти два года и что дальше? К чему вообще ты это написал? Существование новой, ещё не утверждённой версии стандарта, как-то должно оправдать твоё незнание текущей версии? Ты, право, меня забавляешь.

Ты всех, кто меня знает забавляешь и что ? Не зная меня делать такие выводы, это просто глупо.
И не говори, что я перехожу на личности. Я лишь трактую то, что ты пишешь.
Ты даже не знаешь где ты переходишь на личности, а где нет. Иначе бы не оправдывался.
Оператор приведения к типу и конструктор не должны выполнять одно и то же.
Ты же прекрасно знаешь (или нет ?), что спор был о преведении к одному типу.

Ого, да ты поисковиком пользоваться умеешь! Респект. Жаль, только ты сам эти статьи не прочитал, иначе бы их не запостил.
А ты не умеешь, видимо, поэтому и отметил.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

&quot писал(а):Конструктор и оператор приведения к типу выполняют обратные функции. Один и тот же код они содержать не могут.
Разве?

Код: Выделить всё

class TComlex
{
 public:
  double re,im;
 TComplex ()
 {
 }
 TComplex (double re,im)
 {
  this->re=re;
  this->im=im;
 } 
}
class Teklmn
{
 protected:
 double re,im;
 char    String[24];
 public:
 operator TComplex ()
 {
  return TComlex(re,im);
 }
}
Где здесь обратность?
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Airhand, тебя никто в ISD и не приглашал. Ты нафлудил на целый экран, видно очень старался, но по делу так и не сказал ни слова. Ты сейчас-то хоть осознал, что приведение by-value и кастинг указателей и ссылок - это две абсолютно разные вещи? Ты хоть понял, что все три статьи, на которые ты дал ссылки были не в тему?

Кстати, далее флуд буду зачищать.

atavin-ta, имелся в виду конструктор и оператор приведения к типу у одного и того же класса. И на протяжении всей текущей темы обсуждался именно этот вариант. Внимательно посмотри на первый пост, ты видишь там два класса?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Romeo
Хорошо вот так:

Код: Выделить всё

class TComplex
{
        public:
                double re,im;
                TComplex () {};
                TComplex (double re, double im) {  this->re = re;  this->im = im; }
                operator TComplex () {  return TComplex(re,im); }
};
А теперь скажи где тут обратность ? Также скажи зачем в классе оператор приводящий к тому же TComplex ?
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Ха-ха, то есть про статьи ты замял? :)

По поводу твоего примера. Крайне смешной код. Я бы такого не смог придумать, даже если бы очень хотел захотел извернуться. Спасибо, повеселил старика. Естественно, оператор приведения к самому себе просто бессмысленен.

Оператор приведения к типу используется совсем для другого - для представления содержимого класса в виде другого типа/класса. Само собой объявлять оператор приведения к типу следует только тогда, когда это действительно необходимо. Яркий пример того, когда он нужен, находится в первом посте данной темы.

Код: Выделить всё

class SDouble
{
   ...
   SDouble (double fX);
   ...
   operator double();
};
В этом случае не очевидно, что конструктор и оператор приведения выполняют взаимно обратные действия, так как оба имеют крайне простую имплементацию.

Вот тебе другой пример. Представь, что нужно написать класс, который предоставляет возможность работать с ОЧЕНЬ большими целыми числами. Внутренне класс будет содержать массив достаточно большого размера, каждый элемент которого будет хранить одну цифру числа.

Писал от руки, могут быть опечатки:

Код: Выделить всё

class CBigInt
{
public:
   CBigInt(long nValue);
   operator long() const throw(COverflowException);

   // all necessary operators
   ...

private:
   static void ConvertLongToArr(const long& nValue, char digits[]) throw();
   static void ConvertArrToLong(const char digits[], long& nValue) throw(COverflowException);

   char m_digits[256];
};

CBigInt::CBigInt(long nValue)
   : m_digits()
{
   memset(&m_digits, 0, sizeof(m_digits));
   ConvertLongToArr(nValue, m_digits);
}

CBigInt: :o pperator long() const throw(COverflowException)
{
   long nValue;
   ConvertArrToLong(m_digits, nValue);
   return nValue;
}
Тела функций ConvertLongToArr и ConvertArrToLong здесь не приведены, так как они нам не интересны, однако что именно они делают понятно по их именам: первая конвертирует число в массив, вторая массив в число. Надеюсь, мне не следует доказывать дополнительно, что эти две функции выполняют взаимообратные действия. Теперь внимательно посмотри в каких местах эти функции вызываются. Первая - в конструкторе, вторая - в операторе приведения к типу.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Romeo писал(а): Оператор приведения к типу используется совсем для другого - для представления содержимого класса в виде другого типа/класса.
Где ты в том примере увидел другой тип. Мы спорим не о твоих фантазиях по поводу использования оператора.
[LEFT]class SDouble
{
...
SDouble (double fX);
...
operator double();
};[/LEFT]
double и SDouble - разные типы.
В этом случае не очевидно, что конструктор и оператор приведения выполняют взаимно обратные действия, так как оба имеют крайне простую имплементацию.
Этот случай вообще не всчёт, т.к. оператор и конструктор приводят к разным типам.
Тела функций ConvertLongToArr и ConvertArrToLong здесь не приведены, так как они нам не интересны, однако что именно они делают понятно по их именам: первая конвертирует число в массив, вторая массив в число. Надеюсь, мне не следует доказывать дополнительно, что эти две функции выполняют взаимообратные действия. Теперь внимательно посмотри в каких местах эти функции вызываются. Первая - в конструкторе, вторая - в операторе приведения к типу.
То ты говоришь:
Оператор приведения к типу и конструктор не должны выполнять одно и то же. Они как раз наоборот часто выполняют взаимо обратные действия.
то у тебя появляются уже какие-то фукции. Такое непостоянство говорит лишь об одном: ты не можешь доказать свои утверждения и переключился уже на другое.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

&quot писал(а):atavin-ta, имелся в виду конструктор и оператор приведения к типу у одного и того же класса
Я и предположеить не мог такой глупости. Ведь эти члены одного класса противоположны по смыслу. Оператор приведения к типу приводит из данного класса к другому, а конструктор создаёт объект данного класса.
&quot писал(а):

Код: Выделить всё

class TComplex
{
 public:
  double re,im;
  TComplex () 
  {
  };
  TComplex (double re, double im)
  {
   this->re = re;
   this->im = im;
 }
 operator TComplex ()
 {
  return TComplex(re,im);
 }
};[/quote]
Кто так пишет? Глюков захотелось?
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

atavin-ta писал(а): Кто так пишет? Глюков захотелось?
Я только твой пример переделал. Внёс оператор в класс. Так что адресуй эти вопросы себе.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Airhand, передёргиваешь факты именно ты. И переводишь спор на другие темы тоже именно ты. Только в пределах данной темы ты совершил как минимум 3 грубейшие ошибки и ни одну из них так и не признал. Напомнить конкретные промахи или забыл уже?
&quot писал(а):Я только твой пример переделал. Внёс оператор в класс. Так что адресуй эти вопросы себе.
А голова тебе на что? Или ты всегда код бездумно переделываешь?

По теме вопроса есть, что ещё сказать? Если сказать нечего, то жду сутки и закрываю тему, иначе всё сводится к флуду.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Тема закрыта.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Romeo
Я в очередной раз удивляюсь: кто тебя сделал модератором, ты же разводишь флуд.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Закрыто