Re[60]: C+ vs C#
От: Vermicious Knid  
Дата: 15.02.06 08:29
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>1. Абстрактные классы:

C>
C>class Base
C>{
C>public:
C>    virtual ~Base(){};
C>    virtual void squack() = 0;

C>    void some_method(){squack();}
C>};
C>


Я как бы в курсе, хотя уже где-то год прошел с тех пор как я их последний раз применял(да и вообще C++).Действительно абстрактные классы есть, но ведь ограничений скажем так несколько больше чем в C#. Например в конструкторе Base::Base ты вызвать squaсk не сможешь. Плюс в C# можно объявить еще и абстрактное свойство, не только метод.

Да и объективно говоря C++ даже исходя из синтаксиса объявления "абстрактных" классов не может претендовать на более высокий уровень поддержки этой возможности. Уродство это еще-то, особенно в реальном проекте, а не в тестовом примере. В частности типичным является гора мусорных заголовков и широкомасштабное использование forward-declaration(это я в частности о библиотеках, которые мне приходилось часто использовать).

C>2. Интерфейсы:


Это фикция. Это те же абстрактные классы, а не интерфейсы(только не надо сюда приплетать множественное наследование). Те же самые ограничение плюс совершенно другая смысловая нагрузка. Для интерфейсов в нормальном языке существуют определенные правила, которые не должны нарушаться. В C++ это как всегда исключительно вопрос самодисциплины.

C>3. Свойств нет (они к ООП и не относятся). Но при желании:

C>https://secure.codeproject.com/cpp/cppproperties.asp
C>http://www.codeproject.com/samples/cppprops.asp

Опять фикция. На этот раз еще большая. На практике в C++ такой подход никто не применяет. Если кто-то применяет, могу только посочувствовать.

В .NET свойства это неотъемлемая часть компонентной модели. В разрезе ООП свойства обладают всеми "свойствами" обычных методов(плохо только что использование аксессоров свойств как делагатов напрямую в C# не разрешенно, но это небольшая проблема), а значит все таки имеют отношение к ООП.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.