Страница 3 из 3

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

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

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

Ого, да ты поисковиком пользоваться умеешь! Респект. Жаль, только ты сам эти статьи не прочитал, иначе бы их не запостил.
А ты не умеешь, видимо, поэтому и отметил.

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

Добавлено: 23 окт 2009, 05:14
atavin-ta
&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);
 }
}
Где здесь обратность?

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

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

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

atavin-ta, имелся в виду конструктор и оператор приведения к типу у одного и того же класса. И на протяжении всей текущей темы обсуждался именно этот вариант. Внимательно посмотри на первый пост, ты видишь там два класса?

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

Добавлено: 24 окт 2009, 15:29
Airhand
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 ?

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

Добавлено: 24 окт 2009, 16:34
Romeo
Ха-ха, то есть про статьи ты замял? :)

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

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

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

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 здесь не приведены, так как они нам не интересны, однако что именно они делают понятно по их именам: первая конвертирует число в массив, вторая массив в число. Надеюсь, мне не следует доказывать дополнительно, что эти две функции выполняют взаимообратные действия. Теперь внимательно посмотри в каких местах эти функции вызываются. Первая - в конструкторе, вторая - в операторе приведения к типу.

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

Добавлено: 25 окт 2009, 16:08
Airhand
Romeo писал(а): Оператор приведения к типу используется совсем для другого - для представления содержимого класса в виде другого типа/класса.
Где ты в том примере увидел другой тип. Мы спорим не о твоих фантазиях по поводу использования оператора.
[LEFT]class SDouble
{
...
SDouble (double fX);
...
operator double();
};[/LEFT]
double и SDouble - разные типы.
В этом случае не очевидно, что конструктор и оператор приведения выполняют взаимно обратные действия, так как оба имеют крайне простую имплементацию.
Этот случай вообще не всчёт, т.к. оператор и конструктор приводят к разным типам.
Тела функций ConvertLongToArr и ConvertArrToLong здесь не приведены, так как они нам не интересны, однако что именно они делают понятно по их именам: первая конвертирует число в массив, вторая массив в число. Надеюсь, мне не следует доказывать дополнительно, что эти две функции выполняют взаимообратные действия. Теперь внимательно посмотри в каких местах эти функции вызываются. Первая - в конструкторе, вторая - в операторе приведения к типу.
То ты говоришь:
Оператор приведения к типу и конструктор не должны выполнять одно и то же. Они как раз наоборот часто выполняют взаимо обратные действия.
то у тебя появляются уже какие-то фукции. Такое непостоянство говорит лишь об одном: ты не можешь доказать свои утверждения и переключился уже на другое.

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

Добавлено: 26 окт 2009, 04:18
atavin-ta
&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]
Кто так пишет? Глюков захотелось?

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

Добавлено: 26 окт 2009, 16:11
Airhand
atavin-ta писал(а): Кто так пишет? Глюков захотелось?
Я только твой пример переделал. Внёс оператор в класс. Так что адресуй эти вопросы себе.

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

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

По теме вопроса есть, что ещё сказать? Если сказать нечего, то жду сутки и закрываю тему, иначе всё сводится к флуду.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Тема закрыта.

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

Добавлено: 27 окт 2009, 11:02
Airhand
Romeo
Я в очередной раз удивляюсь: кто тебя сделал модератором, ты же разводишь флуд.