Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: дирректива override  (Прочитано 8001 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikedeforest
Гость
« : 19-06-2004 11:20 » 

Извеняюсь, если не туды впихнул вопрос.
Готовлюсь к экзамену, читаю вопрос и вижу что не знаю, потому что не использовал (не требовалось как-то). Вопрос прост: " дирректива override" , в чем ее смысл? Я всегда думал, что она используется только когда применяется абстрактный метод, но я увидел пример, где дирректива override применяется без абстрактного метода, и я не понял смысл ее нахождения там.
Вот в принципе пример:

type

Obj=class
    procedure virtmetod1; virtual;
    procedure virtmetod2; virtual;
end;

    Obj1=class (Obj)
           procedure virtmetod1;override;
    end;

procedure obj.virtmetod1;
   begin
             writeln('working virtmetod1  Obj');
   end;

procedure obj.virtmetod2;
    begin
              writeln('working virtmetod2 Obj');
    end;

procedure Obj1.virtmetod1;
    begin
          writeln('working virtmetod1  Obj1');
    end;

var a:Obj1;
    begin
          a:=obj.create;
          a.virtmetod1;
          a.virtmetod2;
     end.

 И вот что меня смущает, Рез-ты : на консоль выдано virtmetod1 obj1
                                                                                 virtmetod2 obj

 а вот если сделать так: изменение в классе Obj1

Obj1=class(Obj)
    procedure virtmetod1;virtual;
end;

саму процедуру не меняем, то
рез-ты следующие : на консоль выдано virtmetod1 Obj
                                                             virtmetod2 Obj
Я НЕ ПОНИМАЮ, ПОЧЕМУ.  Ну объясните мне дураку такому, что особенного произошло, я знаю для чего испльзуется virtual, неужели я не могу вызвать этот метод. По этому примеру получается что не могу.
Записан
lion_ts
Гость
« Ответ #1 : 19-06-2004 19:20 » 

Ну что ж ты делаешь, а ?
Если хочешь вызвать виртуал метод родителя, так не оверрайдь его в потомке, т.е. вообще не обьявляй ни виртуал, ни оверрайд. А хочешь добавить функциональность - так оверрайдь, вызывай; в конце(начале) можешь и папу вызвать (инхеритед).
Записан
nikedeforest
Гость
« Ответ #2 : 20-06-2004 07:28 » 

Так я самого смысла override не понимаю, это чисто только для экономии памяти получается! (В пособии по DELPHI 5.0. написано что override вызывает замещение в строке описания исходного метода нна новый). Если не писать override а писаь virtual в новом методе, то внешнего эффекта никакого, результат одинаков, но я читал, что если писать virtual а не override то создастся новый метод, так вот я делаю вывод, что это чисто для экономии места и скорости. Я прав???
Записан
Aleksey V.P.
Гость
« Ответ #3 : 24-07-2004 09:52 » 

Нет
директива override говорит, что в классе потомке метод переопределён и это нужно, что бы добавить функционал в метод, который определён в классе предке.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines