Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2013, 17:21   #1
thedoctor
Пользователь
 
Регистрация: 29.11.2013
Сообщений: 10
По умолчанию Не могу ответить на эти 5 вопросов!! Вообще ни в какую!(

Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу ответить на оставшиеся 5 вопросов из лабораторной,которые состоят из 25 вопросов!(На другие 20 я ответил,на эти прост не могу вдуплить,че да как),вот вопросы:
1)какие преимущества дает интерфейсное программирование( с использованием обстрактных базовых классов)
2)Учитывая,что конструкторы не могут быть виртуальными,опишите схему,по которой вы могли бы достичь аналогичного эффекта?
3)зачем может понадобиться делать операторы виртуальными(приведите пример)
4)чем отличаются иерархические структуры, разработанные для наследования интерфейса, от иерархических структур, разработанных для наследования реализаций
5)что произойдет при исключении переопределения функции из класса

Заранее спасибо)
thedoctor вне форума Ответить с цитированием
Старый 30.12.2013, 07:55   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

1. Нет привязки к иерархии классов - можно строить и использовать любые объекты как-будто они идентичны (реализуют интерфейс). Возможно получать классы реализующие несколько интерфейсов (подобие множественного наследования, но лучше). Описание только контракта, без заботы о прочем, что даёт высокую гибкость, интероперабилити и контроль над сложностью системы, что особенно важно в команде.
2. Как можно жить без виртуальных конструкторов ? Кощунство !
Сделать можно через каст/приведение, но нужно много проверок, Си-семья: if (object is class ) {(object as Cclass).Create();} Паскали: if object is Tclass then (object as Tclass).Create;
как ещё сделать такую штуку - сложно сказать, кроме разве что методов близких к естественной реализации в языке - в виде ссылок на соответствующие методы, у каждого класса есть таблица виртуальных методов, и по ссылке на класс (не экземпляр) берётся соответствующий метод, в т.ч. и на конструктор.
3. По-книжному - для того чтобы разное поведение можно было описывать в коде однообразно, основа полиморфизма. В реальности - также - чтобы можно было взять ссылку на объект типа базового класса, инстанцировать его классом-потомком (которых может быть много разных, с разными реализациями методов) и один единственный вызов виртуального метода приведёт к разному поведению, в зависимости от того, каким именно потомком был инстанцирован объект. Стандартный пример - класс "животное" с виртуальным методом voice и его потомки: кошка, собака или кто угодно, у которых реализация метода - вывод строки "мяу" "гав" или соответственно конкретному животному. При инстанцировании объекта любым из потомков и вызове метода voice - получим строку "голоса" конкретного животного. При этом, можем в одну и ту же переменную типа класса животного много раз присваивать разные объекты-потомки, и всё будет работать именно основываясь на конкретном методе.
4. Вот уж чего не знаю, вообще не слышал таких терминов, хотя не одну книжку по ОО теории прочитал. Чисто по логике текста вопроса - нужно отличие класса от интерфейса (в наследовании они отличаются по сути тем же) - ну тут просто, у интерфейса нет полей (и они не наследуются), все методы public видимости (нельзя её менять, как у классов). Больше сложно тут что-то мне сказать, может , кто в теме, так и меня просветит заодно.
5. Исключение переопределения функции (метод- более точный термин) приведёт к очевидной вещи - метод будет работать ровно так, как он работает в предке, реализация в данном классе не будет заменена/дополнена. Если же имеется ввиду метод оставить, но убрать директиву override - то такой метод станет обычным (статическим по терминологии дельфи, но не static, невиртуальным в общеупотребимом смысле), и одновременно перекроет одноимённый метод предка. Дельфи компилятор выдаёт ворнинг в этом случае, который можно убрать (одновременно указывая коллегам, что это сделано намеренно) директивой reintroduce, в других языках с этим вопросом я не сталкивался, сказать что-то определённое затрудняюсь.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Надо ответить на несколько вопросов по информатике. VladimirNew Свободное общение 4 20.12.2011 17:22
не как не могу понять эти схемы алгоритмов masterlomaster Помощь студентам 8 02.09.2010 16:13
Указатели...вообще нечего не могу понять... J__S(Юляшка) Общие вопросы C/C++ 0 27.01.2010 11:38