crsib
> ООП там появится, когда ты сделаешь класс "Number", который будет являться
> базовым для всякоразных чисел.
ну как же так ? есть класс Complex, есть полиморфизм для operator + ( он есть и для Complex и для int и для float ), есть инкапсуляция содержимого Complex
так что ООП очень даже есть :)
innuendo
> есть полиморфизм для operator +
Это перегрузкой в народе называют. Полиморфным поведение станет тогда, когда я Compile time не буду знать, над какими конкертно типами я совершаю операции.
Например,
class Number {...}; class Complex {...}; class Integer {...}; .... Number* foo(Number* lhs, Number* rhs) { return lhs->add( rhs); } ... Complex a; Integer b; Number* r = foo( &a, &b);
Но операции над числами - фиговый пример, в общем-то
crsib
> > есть полиморфизм для operator +
> Это перегрузкой в народе называют. Полиморфным поведение станет тогда, когда я
> Compile time не буду знать, над какими конкертно типами я совершаю операции.
неа, есть статик полиморфизм, есть динамик :)
crsib
> Проблема в том, что ты не понимаешь, что в описанном тобой случае полиморфизма нет.
Ну растолкуй мне википедию. Только это ты не понимаешь.
crsib
> Это перегрузкой в народе называют.
int abs (int x) { if ( x<0) { return -x; } return x; } float abs ( float x) { if ( x<0.0) { return -x; } return x; }
Вот это перегрузка. Но ты не обратил внимания, что один и тот же оператор различно перегружается для разных версий одного типа, различающихся внутренним представлением данных, сохраняя при этом весь интерфейс и семантику и оба раза являясь членом. А перекрытие в потомке функции, или оператора предка при сохранении и синтаксиса, и семантики называется уже иначе.
innuendo
> неа, есть статик полиморфизм, есть динамик :)
Ну, во первых, статический полиморфизм придумал Александреску, во вторых он не об этом. То, что ты приводишь в качестве примера - перегрузка. Статическим полиморфизмом страдает (или наслаждается?) STL
atavin-ta
> Ну растолкуй мне википедию. Только это ты не понимаешь.
Забей, чувак, я не к.т.н., мне вряд ли удасться тебе это объяснить. Ты мне все равно не поверишь, куда мне до тебя... В
innuendo у меня больше веры xD
crsib
> То, что ты приводишь в качестве примера - перегрузка.
http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B3%D1%80… 6%D0%B8%D0%B9
Перегрузка операторов — в программировании — один из способов реализации полиморфизма, заключающийся в возможности одновременного существования в одной области видимости нескольких различных вариантов применения оператора, имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются.
crsib
> Ну, во первых, статический полиморфизм придумал Александреску
ну, допустим, Страуструп писал об этом задолго до ...
crsib
> Ты мне все равно не поверишь,
А ты попробуй.
innuendo
> Перегрузка операторов — в программировании — один из способов реализации полиморфизма,
По форме да, но один и тот же указатель в случае функции abs не может менять своё поведение в части вызова разной функции по
a=abs(*p);
, в зависимости от фактического типа данного в ячейке поэтому указателю, следовательно это ещё не полиморфизм по сути. В отличие от иерархии классов комплексных чисел.
innuendo
> неа, есть статик полиморфизм, есть динамик :)
Ты не ответил, какое отношение статический полиморфизм имеет к ООП. В ООП имеют дело с полиморфизмом подтипов. Статический полиморфизм (ad-hoc, параметрический) в основном ассоциируется с функциональным программирование и к ООП отношения не имеет. Если он в том или ином виде поддерживается гибридными языками типа C++ - оно не говорит о том, что это ООП.
vladislav
> В ООП имеют дело с полиморфизмом подтипов.
А TArifmeticComplex с каких пр перестал быть подтипом TComplex?
atavin-ta
> TArifmeticComplex
Что это?
vladislav
> Ты не ответил, какое отношение статический полиморфизм имеет к ООП.
а ты не ответил на мой вопрос :)
> Статический полиморфизм (ad-hoc, параметрический) в основном ассоциируется с
> функциональным программирование и к ООП отношения не имеет.
а в C++, за который речь идёт, всё ассоциируется как надо, так что вопросов нету
> Если он в том или ином виде поддерживается гибридными языками типа C++ - оно не
> говорит о том, что это ООП.
вот очень хочется услышать, что такое не ООП ?
innuendo
> вот очень хочется услышать, что такое не ООП ?
Я тоже.
Я могу сказать, что не ООП ;)
vladislav
> а ты не ответил на мой вопрос :)
На какой?
Тема в архиве.