|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.02.2015, 22:14 | #11 | |
Форумчанин
Регистрация: 16.01.2015
Сообщений: 672
|
Цитата:
вы разберитесь для начала что такое класс и что такое экземпляр, потом и полиморфизм легче пойдет Base instance = new Repetuz(); тут instance это всего лишь переменная ссылочного типа, позволяющая хранить ссылку на объекты типа Base или его потомков. В данном случае в ней будет находиться ссылка на объект (экземпляр) класса Repetuz, полностью, а не обрезанный до Base, т.к. реально создается именно такой объект (new Repetuz()) следовательно в его vmt есть все методы которые прописаны у Repetuz, и указывают на код реализованный в репетузе, и в бейзе. Base instance только оговаривает открытый интерфейс с которым можно работать без всяких хитростей (приведение то или рефлексия ..). Так как реальный объект таки Repetuz то ничто не мешает сделать приведение ((Repetuz)instance ) и вызвать уже те методы которые есть у Repetuz но нет в Base. Последний раз редактировалось lomastr_; 07.02.2015 в 22:27. |
|
12.02.2015, 18:13 | #12 | ||
Форумчанин
Регистрация: 29.06.2013
Сообщений: 132
|
Цитата:
Цитата:
Что за vmt ? |
||
12.02.2015, 18:21 | #13 | |
Форумчанин
Регистрация: 16.01.2015
Сообщений: 672
|
Цитата:
|
|
12.02.2015, 18:41 | #14 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Ох уж эти ученики... Возьмут чисто академический пример и начинается: а зачем? а почему? а можно же так... Привели реальный пример из жизни с коллекциями, но он слишком сложный. Так поэтому и для обучения суют упрощенные варианты, что другие сложные и "такое еще не проходили". Можете вообще писать var instance = new Repetuz();
ООП по книжке не выучите, его пользовать нужно и только с практикой оно придёт. В чем тут вопрос я так и не понял. Всё понятно, но зачем в учебном примере написали такую тупость? Так на то он и учебный пример. Вопрос снят или что-то еще волнует? ЗЫ. vmt - Virtual Method Table |
12.02.2015, 19:30 | #15 | ||
Форумчанин
Регистрация: 29.06.2013
Сообщений: 132
|
Ну так обычно то всё есть везде... когда так:
PHP код:
Цитата:
Цитата:
P.S. Вопрос не снят, т.к. сами видите, что не всё ясно мне. Последний раз редактировалось hoz; 12.02.2015 в 19:37. |
||
12.02.2015, 19:47 | #16 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Коллекции там не причем вообще, можно и массив, Shape[].
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
12.02.2015, 20:16 | #17 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Скачать можно кучу книг и посмотреть в какой из них будет описано более понятно. Причем можно взять и книжку по С++ и по Делфи, там на 90% одно и то же. Базовые вещи объяснять - дело неблагодарное, т.к. много нюансов.
Всегда можно придумать свой пример. Всегда можно создать свою иерархию классов, прописать вызовы всяких разных методов (виртуальных, перегруженных. статических,...). Для понимания просто в методах пишется что-то типа: Console.WriteLine("Конструктор класса Base"); При выполнении программы будет достаточно наглядно виден порядок вызова методов и где что собственно вызывалось. Если просто, то полиморфизм - это разное поведение казалось бы одного и того же кода. Код:
|
12.02.2015, 20:54 | #18 | |
Форумчанин
Регистрация: 29.06.2013
Сообщений: 132
|
Цитата:
PHP код:
Поскольку посредством объекта instance вызвать методы из класса DerivedClass() нельзя, то я и задал вопрос как тогда переменная instance не обрезана до базовой, а является полноценной ссылкой на класс DerivedClass() и в нём имеюются все методы из класса DerivedClass(). lomastr_ заметил, что: " у объекта они и есть, их нет в интерфейсе (контракте) " Я не понял причины. |
|
12.02.2015, 22:18 | #19 | |
Форумчанин
Регистрация: 16.01.2015
Сообщений: 672
|
Цитата:
|
|
12.02.2015, 22:27 | #20 | |
Форумчанин
Регистрация: 16.01.2015
Сообщений: 672
|
Цитата:
|
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Макрос для приведения к одному, одинаковому размеру графиков | REztor | Microsoft Office Excel | 2 | 23.12.2012 22:28 |
Битва экстрасенсов. Приведения, души и т.д. | TwiX | Свободное общение | 5 | 30.10.2011 15:22 |
Ошибка при присвоении объекту производного класса объекта базового класса с исп. явного приведения типов | Lanx | Помощь студентам | 0 | 06.04.2011 20:24 |
Приведение к типу | __Demon__ | Общие вопросы C/C++ | 1 | 27.09.2009 17:40 |
Проблема приведения типов | Dec(Leprosus) | Общие вопросы C/C++ | 14 | 08.05.2008 04:24 |