Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Виртуальные функции. Статическое замещение методов

Перегрузка

Статическое замещение методов.

Полиморфизм

Наследование

Полиморфизм и наследование в Delphi

В Object Pascal имеется возможность порождать более сложные классы от более простых путем добавления к ним некоторых полей и методов.

При описании класса указывается, от какого класса наследуется новый класс. По умолчанию считается, что класс наследуется от класса TObject.


type

Имя_класса_насл=class (Имя_баз_класса)

end;

type

TChicken = class (TBird)

end;


Все поля и методы базового класса доступны и в классе-наследнике. Для этого их не нужно указывать при описании класса наследника, описываются только добавляемые поля и методы, а так же те методы, которые вы хотите переопределить, т.е. сделать так, чтобы та же функция или процедура выполняла другие действия.

type


TBird = class

color: string;

age: integer;

Constructor Create;

procedure Show();

end;

type

TChicken = class (TBird)

name: string;

Constructor Create;

procedure Show();

end;

var A: TBird;

B:TChicken;

begin

A:= TBird.Create;

B:= TChicken.Create;

A.color:=”Black”;

B.color:=”White”;

A.age:=2;

B.age:=1;

B.name:=”Pestrushka”;

A.Show();

B.Show();

end.


 

- в классе-наследнике описывается метод с тем же названием, что и в базовом классе (см. метод Show() в предыдущем примере).

- в рамках 1 класса объявлены несколько методов с одинаковыми именами, но разными наборами аргументов.

Ключевое слово overload.

type T1 = class

procedure X (i:integer);

procedure X (r:real); overload;

end;

var a:T1;

begin

a:=T1.Create;

a.X(12); // вызов первого метода Х

a.X(1.6); // вызов второго метода Х

end.

Виртуальный метод (виртуальная функция) - метод (функция) класса, который может быть переопределён в классах-наследниках так, что конкретная реализация метода для вызова будет определяться во время исполнения.

Виртуальные методы — один из важнейших приёмов реализации полиморфизма. Они позволяют создавать общий код, который может работать как с объектами базового класса, так и с объектами любого его класса-наследника. При этом базовый класс определяет способ работы с объектами и любые его наследники могут предоставлять конкретную реализацию этого способа.

Базовый класс может и не предоставлять реализации виртуального метода, а только декларировать его существование. Такие методы без реализации называются «чисто виртуальными» или абстрактными. Класс, содержащий хотя бы один такой метод, тоже будет абстрактным. Объект такого класса создать нельзя! Наследники абстрактного класса должны предоставить реализацию для всех его абстрактных методов, иначе они также будут абстрактными классами.

Объявим два класса. Предка (T1) и его потомка (T2):


T1 = class

<== предыдущая лекция | следующая лекция ==>
Принципы ООП | Проекты в Delphi
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 379; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.