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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2012, 17:15   #1
nats
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 65
По умолчанию Задача на собеседовании - какой метод класса будет вызван в примере

Проходил собеседования. Поставили такую задачку:
PHP код:
public class A
{
   public 
virtual void M1();
   public 
void M2();
}

public class 
BA
{
  public 
override void M1();
  public new 
void M2();
}

A a = new B();
B b as B;

a.M1(); ?
a.M2(); ?
b.M1(); ?
b.M2(); ? 
вместо знаков вопроса надо поставить метод из какого класа вызветься
Какие у кого варианты? (аргументируйте, пожалуйста, почему)
nats вне форума Ответить с цитированием
Старый 26.07.2012, 20:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Какие у кого варианты?
Запусти это в Си на пошаговку и посмотри куда программа поведет
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.07.2012, 20:31   #3
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

ето си шарп наверное

Цитата:
Какие у кого варианты? (аргументируйте, пожалуйста, почему)
зачем, запусти, посмотри что будет.

Последний раз редактировалось Stilet; 26.07.2012 в 21:10.
rUs_LAN вне форума Ответить с цитированием
Старый 26.07.2012, 21:57   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,311
По умолчанию

В принципе, существуют методы раннего и позднего связывания.
Для метода класса, в котором метод описан как virtual, формируется таблица виртуальных методов. В этом случае, при вызове из потомка метода с таким-же именем как и у родителя, будет вызван метод потомка. Если метод не описан как виртуальный, то будет вызываться метод предка.
Т.е. в данном случае:
a.M1(); - метод класса A
a.M2(); - метод класса A
b.M1(); - метод класса B. В - потомок класса A, метод описан как virtual и переопределен в классе B.
b.M2(); - метод класса A

Цитата:
Модификатор override требуется для расширения или изменения абстрактной или виртуальной реализации унаследованного метода, свойства, индексатора или события.
Это из общих соображений, но С# не знаю ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 26.07.2012, 22:07   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
a.M1(); - метод класса A
нет, метод виртуальный, и он будет взят из VMT.
а у нас обьект класса B.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.07.2012, 17:30   #6
nats
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 65
По умолчанию

Компилятор показал ответ:
В
А
В
В
nats вне форума Ответить с цитированием
Старый 31.07.2012, 23:03   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

как и ожидалось, правда я пропустил четвертый вызов чего-то.

четвертый метод был перекрыт(не переопределен), и у нас используется через ссылку на B, потому и вызывается метод от B.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ассемблер, какой из вариантов будет правильный Ashley12 Помощь студентам 1 14.01.2012 01:08
Какой будет алгоритм=) specnazkin Помощь студентам 2 27.11.2010 20:37
C# готовая задача, какой будет конечный результат? dr.Chas Помощь студентам 2 26.11.2010 08:58
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54
Метод для класса который будет работать с будующим экземпляром SunKnight Общие вопросы .NET 7 12.05.2009 20:25