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

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

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

Romeo писал(а):Airhand, где граница между операциями приведения класса и общими? Не старайся, ты её не сможешь указать, так как её нет.
А зачем тогда куча правил, которые регулируют то, чего "нет" ?
У компилятора нет выбора. Записав так, мы будем ВСЕГДА иметь одно и то же поведение компилятора - это гарантия стандарта. Поведения компилятора не будет зависеть ни от времени года, ни от атмосферного давления, ни от индекса Доу-Джонса. Это требование СТАНДАРТА.
Не относись к стандарту, как к панацее. Уже есть черновик четвёртого стандарта.
Слушай, если бы мне кто-то твердил днём и ночью про какой-то там стандарт, который я не знаю, но должен знать, как специалист, то я бы его уже давно прочёл. Но ты, молодец, Airhand. Ты упорен до конца в своём стремлении быть необразованным.
Не переходи на личности. Я давно уже прочитал третий стандарт. Появится 4 - прочитаю и его.
Оператор приведения к типу не есть зло. Для того, чтобы решить указанную проблему на уровне архитектуры приложения, следует подобрать такой набор операторов и конструкторов класса, который бы обеспечивал однозначную трактовку подобных синтаксических конструкций. Конкретного алгоритма по которому это можно сделать нет. Здесь придётся идти методом проб и ошибок, добиваясь гармонии.
Приведения типов - это зло, которое очень трудно сопровождать. А как же дублирование кода в конструкторе и операторе присваивания ? Тот, кто исправит конструктор может не исправить оператор. И наоборот.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Airhand писал(а):Приведения типов - это зло, которое очень трудно сопровождать.
Если мы приводим к типу - классу, то это не что иное как вызов соответствующего метода этого класса. О чем уже писал Romeo.
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

BBB писал(а):Если мы приводим к типу - классу, то это не что иное как вызов соответствующего метода этого класса. О чем уже писал Romeo.
Если бы это было так, то в коде:

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

class Base { 
    void SomeFunction() = 0
... };
class Derived: public Base { ... };
Derived d;
Base *pb = &d;
Вызывался бы конструктор чисто виртуального Base. Приведение типов пришло из С, а там нет классов. Вот почитай про приведение типов:
http://www.tdoc.ru/c/programming/cpp/cp ... age56.html
Как быть с тем,что любой тип может быть приведён к void ? Тоже конструктор вызывается ?
Вот почитай о приведении типов с сайта мелкомягких: http://search.microsoft.com/results.asp ... c%2b%2b%22
Вот ещё статья, указывающая чем опасно испольpование приведения типов. Из MSDN: http://msdn.microsoft.com/ru-ru/library/ms229033.aspx
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

..........
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

&quot писал(а):Приведения типов - это зло, которое очень трудно сопровождать. А как же дублирование кода в конструкторе и операторе присваивания ? Тот, кто исправит конструктор может не исправить оператор. И наоборот.
Приводи конструктором. То есть приблизительно так

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

class MyClass1
{
 ...
 MyClass1(MyParamerType p);
 ...
};
class MyClass2
{
 ...
 operator  MyClass1()
 {
  return MyParamerType(p);
 }
 ...
};
Хотя не уверен, что этот подход применим во всех случаях.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

atavin-ta писал(а):Приводи конструктором.
Ты хоть знаешь, что такое сопровождение ? Писать самому очень эффективно, особенно когда правишь чужой код. :)
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

Я же яно написал, что не уврен, что такой подход применим во всех случаях.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

&quot писал(а):Не относись к стандарту, как к панацее
Не относись к ПДД, как к панацее. Знавал я таких водителей. Большинство покоятся с миром.

Ты не прав в корне, если ты НЕ относишься к стандарту, как к панацеи. Я в своей команде таких людей просто не держу.
&quot писал(а):Уже есть черновик четвёртого стандарта.
Он уже существует почти два года и что дальше? К чему вообще ты это написал? Существование новой, ещё не утверждённой версии стандарта, как-то должно оправдать твоё незнание текущей версии? Ты, право, меня забавляешь.
&quot писал(а):Я давно уже прочитал третий стандарт. Появится 4 - прочитаю и его.
А я давно уже прочитал неутверждённую версию 4-го стандарта. И что? Пойми, Airhand, прочесть недостаточно. Нужно ещё и понять. А с этим у тебя самые большие проблемы. На моей памяти нет ни одной темы, в который бы у тебя не было ощутимых провалов в знаниях. И не говори, что я перехожу на личности. Я лишь трактую то, что ты пишешь.
&quot писал(а):Приведения типов - это зло, которое очень трудно сопровождать. А как же дублирование кода в конструкторе и операторе присваивания ? Тот, кто исправит конструктор может не исправить оператор. И наоборот.
Оператор приведения к типу и конструктор не должны выполнять одно и то же. Они как раз наоборот часто выполняют взаимо обратные действия. Да, оператор присваивания нужно определять тогда, когда он действительно нужен. Но условия задачи как раз содержали такие требования.
&quot писал(а):Вызывался бы конструктор чисто виртуального Base. Приведение типов пришло из С, а там нет классов. Вот почитай про приведение типов:
http://www.tdoc.ru/c/programming/cpp...s2-page56.html
Как быть с тем,что любой тип может быть приведён к void ? Тоже конструктор вызывается ?
Вот почитай о приведении типов с сайта мелкомягких: http://search.microsoft.com/results....+%22c%2b%2b%22
Вот ещё статья, указывающая чем опасно испольpование приведения типов. Из MSDN: http://msdn.microsoft.com/ru-ru/library/ms229033.aspx
Ого, да ты поисковиком пользоваться умеешь! Респект. Жаль, только ты сам эти статьи не прочитал, иначе бы их не запостил.

А теперь по сути. Ты в очередной раз показал полное непонимание сути происходящего. Что ещё можно говорить, если приведение указателей и приведение by-value для тебя является одним и тем же.

Ссылка №1: Мы не занимаемся приведение указателей и ссылок. Читай внимательней.
Ссылка №2: Эта ссылка вообще не понятна зачем. Ты сам эти статьи читал?
Ссылка №3: Это единственная ссылка, которая подходит по теме. Но и тут ты проявил непонимание. В условиях задачи сказано, что операторы приведения должны быть. Мы рассуждаем как их правильно использовать, а не нужны ли они вообще.
&quot писал(а):Приводи конструктором. То есть приблизительно так
Здесь я сути вообще не уловил.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

&quot писал(а):Здесь я сути вообще не уловил.
Что знесь не понятного? Всего лишь, если у тебя конструктор и оператор приведения выполняют одно и то же, то вызывай конструктор из оператора приведения.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Если ты не понимаешь сути фрагментов написанных по-еврейски, то это ещё не беда. Плохо, если перестанешь понимать, как работают твои проги.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

&quot писал(а):Всего лишь, если у тебя конструктор и оператор приведения выполняют одно и то же, то вызывай конструктор из оператора приведения.
Конструктор и оператор приведения к типу выполняют обратные функции. Один и тот же код они содержать не могут.
&quot писал(а):Если ты не понимаешь сути фрагментов написанных по-еврейски, то это ещё не беда. Плохо, если перестанешь понимать, как работают твои проги.
O_o
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Закрыто