Здравствуйте, execve, Вы писали:
E>Здравствуйте, LuciferMoscow, Вы писали:
E>>>operator+ совсем не обязан иметь семантику "оператор сложения". E>>>Вспомни про operator<< для потоков, который возвращает неконстантную ссылку. LM>>Не обязательно, но скорее всего человек сопровождающий код будет надеятся на некоторое поведение данного оператора.
E>Точно так же, как и для operator<<
LM>>Верю, что ты можешь привести пример, когда это не так. E>
Пример плохой. И не по теме. Там был Something T::opearator+(const T&)
LM>>P.S. Ссылку на книгу Саттера и Александреску давать надо? E>Конечно. Желательно на введение или на содержание. E>P.S. Ссылку на что именно? http://www.ozon.ru/context/detail/id/2381848/
Buy and read
Здравствуйте, Alexey_ch, Вы писали:
A_>Здравствуйте, fomiha, Вы писали:
F>>от которого должен наследоваться квадрат, но никак не квадрату. A_>Даже если оба класса унаследованы от абстрактной Фигуры с виртуальным Draw(), можно не писать код рисования дважды, унаследовав квадрат от прямоугольника.
И какую смысловую нагрузку будет нести класс квадрат (тогда он будет просто частный случай прямоугольника)
если у него нет отличий от прямоугольника в таком случае?
A_>>>P.S. Квадрат нельзя описать одним свойством, т.к. без знания, что с этим свойством делать, квадрат не нарисуется И это знание как раз заключено в методе Draw(). F>>почему нельзя )) F>>свойство одно — длина стороны A_>Потому что следуя такой логике можно унаследовать прямоугольник от круга У него тоже "одно свойство".
да можно от чего угодно с одним свойством )) — если того потребуют условия задачи, главное знать контекст (зачем вообще эта иерархия нужна)
да и еще как понимать эти фигуры (ведь их можно понимать как массив длин сторон и массив углов — тогда иерархия вообще бессмысленна, а можно идти от простого к сложному)
Здравствуйте, LuciferMoscow, Вы писали:
LM>>>>Он прав. Возврат ссылки на локальную переменную. _>>>вот это он так подковырнуть хотел. на что я ответи, что в самом тьупом случае можно завести глобалную переменную и возвращать ссылку на нее... и все работать будет — цель достигнута LM>>multithreading. LM>ilya_ny, Вы поняли, что Ваш хак летит в трам-тарары?
не
в том вопросе главное чтобы не валилось. а логика не втором месте
Здравствуйте, fomiha, Вы писали: F>>>от которого должен наследоваться квадрат, но никак не квадрату. A_>>Даже если оба класса унаследованы от абстрактной Фигуры с виртуальным Draw(), можно не писать код рисования дважды, унаследовав квадрат от прямоугольника. F>И какую смысловую нагрузку будет нести класс квадрат (тогда он будет просто частный случай прямоугольника) F>если у него нет отличий от прямоугольника в таком случае?
Чего-нибудь уникальное именно для квадрата . Например, вычисление диаметра вписанной окружности
GetInscreibedCircleDiameter() {return m_nWidth;}
Плюс, если инициализация оъекта производится в конструкторе, то у квадрата всегда будет одинаковая длина и ширина.
class Square : public Rectangle
{
public:
Square (int nSide) : Rectangle(nSide, nSide) {};
}
Здравствуйте, Sh1ZoID, Вы писали:
SZI> И когда я сожусь за комп, я не то, что сообразить ничего не могу, я по клавишам-то с трудом попадаю(серьёзно!) .
Эээ, не знаю, насколько мой метод подойдет...
Я перед собеседованиями напиваюсь.
Утром — похмелье, голова болит, кружится, тошнит...
Приходишь на собеседование и просто не можешь нервничать... Так как сознание полностью сконцентрировано на состоянии, то ответы приходят откуда-то из подсознания.
Главное, конечно, заставить туда прийти в принципе.
Отвечаю на последнее сообщение, не видя корней(лень искать) спора о квадрате и прямоугольнике.
Ссылаюсь на книгу Саттер,Александреску "Стандарты программирования на С++".
Совет 37:
Открытое наследование означает заменимость. Наследование надо не для повторного использования, а чтобы быть повторно использованным
scipped
Наиболее часто в этой связи два класса — квадрат и прмоугольник.scipped
Квадрат не может быть корректно унаследован от прямоугольника, т.к. SetWidth не изменяем его высоту
Прямоугольник не может быть коррекно унаследован от квадрата, т.к. его клиенты полагают, что для нахождения его площади достаточно возвести в квадрат его ширину
P.S. Цитата переврана, но надеюсь смысл сохранил: "Наследующий класс обязан сохранять инварианты наследуемого"
Здравствуйте, Me_, Вы писали:
F>>... F>>No! A square might be a rectangle, but a Square object is definitely not a Rectangle F>>object. Why? Because the behavior of a Square object is not consistent with the F>>behavior of a Rectangle object. Behaviorally, a Square is not a Rectangle! And it F>>is behavior that software is really all about. F>>...
Me_>А вот про поведение ничего сказано не было на собеседовании. Если основываться только на формах — то наследование прямоугольник->квадрат — абсолютно правильно.
Этот случай про квадрат и прямоугольник настолько популярен в литературе посвященной ООП что незнание этого вопроса наталкивает на мысль что ни одной книжки о ООП Вы не читали и что эта тема Вас мало интересует а следовательно уровень Ваших знаний в области ООП недостаточен. Ваши посты только убедили меня в этом мнении.
Здравствуйте, karkadil, Вы писали:
K>Я перед собеседованиями напиваюсь. K>Утром — похмелье, голова болит, кружится, тошнит...
Ну и как? Взяли?
И как интервьюеры к такому состоянию относятся?
Здравствуйте, karkadil, Вы писали:
K>Здравствуйте, Sh1ZoID, Вы писали:
SZI>> И когда я сожусь за комп, я не то, что сообразить ничего не могу, я по клавишам-то с трудом попадаю(серьёзно!) .
K>Эээ, не знаю, насколько мой метод подойдет... K>Я перед собеседованиями напиваюсь. K>Утром — похмелье, голова болит, кружится, тошнит... K>Приходишь на собеседование и просто не можешь нервничать... Так как сознание полностью сконцентрировано на состоянии, то ответы приходят откуда-то из подсознания.
K>Главное, конечно, заставить туда прийти в принципе.
K>ЗЫ Это не шутка, мне действительно помогало.
Только вот руки в два раза сильней трестись будут
ЗЫ Нет, спасибо, конечно, за совет, вот только в таком состоянии всё будет только хуже(фор ми)
Здравствуйте, GarryIV, Вы писали:
GIV>Этот случай про квадрат и прямоугольник настолько популярен в литературе посвященной ООП что незнание этого вопроса наталкивает на мысль что ни одной книжки о ООП Вы не читали и что эта тема Вас мало интересует а следовательно уровень Ваших знаний в области ООП недостаточен. Ваши посты только убедили меня в этом мнении.
Знаете, я немало читал книг. Просто данный пример не встечал. А судить по тому, что "Ты не знаешь, какой функцие пишется в реестр","Чем отличается квадрат от прямоугольника" это
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, karkadil, Вы писали:
K>>Я перед собеседованиями напиваюсь. K>>Утром — похмелье, голова болит, кружится, тошнит... CC>Ну и как? Взяли? CC>И как интервьюеры к такому состоянию относятся?
Я один раз проходил собеседование в таком состояние. Самое сложное было говорить(пить очень хотелось). Никому не рекомендую
P.S. Мне сделали предлдожения
p.S.S. Я предпочел более выгодное
Строгое предупреждение за нарушение п.5 обязательных правил — "Оскорблять и обзывать собеседника, ставить под сомнение его профессиональную квалификацию, придираться к его нику, указывать на орфографические и синтаксические ошибки и т.д. запрещается."
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by Iron Maiden — Dance Of Death ]
Строгое предупреждение за нарушение п.5 обязательных правил — "Оскорблять и обзывать собеседника, ставить под сомнение его профессиональную квалификацию, придираться к его нику, указывать на орфографические и синтаксические ошибки и т.д. запрещается."
Тогда может обоим по рогам надо?
GarryIV за то, что подставил под сомнение профессионализм автора темы как программиста, а мне за точно сделал тоже замое в отношение GarryIV как интервьюера?
Строгое предупреждение за оверквотинг.
Так может сделаем нормальный движок, который не провоцирует на оверквотинг?
А так: гадить на улице запретили, а туалеты все позакрывали. Вот и думай: либо в штаны нагадить, либо на зону попасть
Наследование надо не для повторного использования, а чтобы быть повторно использованным
Мысль не осилил
LM>
Квадрат не может быть корректно унаследован от прямоугольника, т.к. SetWidth не изменяем его высоту
Прямоугольник не может быть коррекно унаследован от квадрата, т.к. его клиенты полагают, что для нахождения его площади достаточно возвести в квадрат его ширину
Значит, например, виртуальная CWnd::WndProc() это чистое зло Сам CWnd не знает, что там происходит.
Мне кажется, что Александреску пережевывает надуманную проблему. SetWidth() может быть объявлена как private. И почему клиенты класса Прямоугольник должны возводить GetWidth() в квадрат? Во-первых они знают, что это прямоугольник, а не квадрат. И если очень хочется работать с этими классами через единый интерфейс, то никто не мешает написать базовую виртуальную 2DShape::GetArea()
LM>P.S. Цитата переврана, но надеюсь смысл сохранил: "Наследующий класс обязан сохранять инварианты наследуемого"
А каждая база данных должна быть нормализована И еще мир во всем мире...