|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.12.2013, 17:21 | #1 |
Пользователь
Регистрация: 29.11.2013
Сообщений: 10
|
Не могу ответить на эти 5 вопросов!! Вообще ни в какую!(
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу ответить на оставшиеся 5 вопросов из лабораторной,которые состоят из 25 вопросов!(На другие 20 я ответил,на эти прост не могу вдуплить,че да как),вот вопросы:
1)какие преимущества дает интерфейсное программирование( с использованием обстрактных базовых классов) 2)Учитывая,что конструкторы не могут быть виртуальными,опишите схему,по которой вы могли бы достичь аналогичного эффекта? 3)зачем может понадобиться делать операторы виртуальными(приведите пример) 4)чем отличаются иерархические структуры, разработанные для наследования интерфейса, от иерархических структур, разработанных для наследования реализаций 5)что произойдет при исключении переопределения функции из класса Заранее спасибо) |
30.12.2013, 07:55 | #2 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,886
|
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, в других языках с этим вопросом я не сталкивался, сказать что-то определённое затрудняюсь. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Надо ответить на несколько вопросов по информатике. | VladimirNew | Свободное общение | 4 | 20.12.2011 17:22 |
не как не могу понять эти схемы алгоритмов | masterlomaster | Помощь студентам | 8 | 02.09.2010 16:13 |
Указатели...вообще нечего не могу понять... | J__S(Юляшка) | Общие вопросы C/C++ | 0 | 27.01.2010 11:38 |