КАТЕГОРИИ: Архитектура-(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) |
Полиморфизм и позднее связывание
ВИРТУАЛЬНЫЕ ФУНКЦИИ Статические методы Особенности статических полей Статические поля Применяются для хранения данных, общих для всех объектов класса, эти поля существуют для всех объектов класса в единственном экземпляре, т.е. это такое поле, значение к которому можно обратиться. 1. Память под статическое поле выделяется один раз при его инициализации независимо о числа созданных объектов и даже при их отсутствии 2. Статические поля доступа как через имя класса, так и через имя объекта. Class b { Public Static int count } A::count; B obj; Obj count 3. На статические поля распространяется действия спецификатора доступа, поэтому статические поля, описанные с идентификатором PRIVATE нельзя изменить. Class b { Public Static int count } A::count; B obj; Obj count = 3 Это можно сделать только с помощью статических методов Предназначены для обращения к статическим полям классов Они могут обращаться только к статическим полям и вызывать только другие статические методы, обращение производится также как и к полям. Механизмы виртуальных функций обращаются в тех случаях, когда в базовый класс необходимо поместить функцию, которая должна по разному выполняться в производных классах. Виртуальные функции важны для того Полиморфизм поддерживается двумя способами: 1. Посредством перегрузки виртуальных операций и функций 2. Посредством виртуальных функций CLASS Grafic { PUBLIC class, public Gragic { Void build (); public Void Print (); void build(); } void print(); Circle A; A build (); Функция класса, причиной этого является то что без использования механизма виртуальных функций вызовы build будут связаны на этапе компиляции с определением функции Build из базового класса. Если функция в базовом классе объявлена как виртуальтная, то её вызовы будут обрабатываться методом позднего связывания.
Каждый объект содержит ссылку на таблицу адресов виртуальных методов своего класса, при вызове виртуального метода его адрес извлекается соответсвующий данному объекту таблицы, таким образом вызывается то, тчо надо. Виртуальные функции реализуют идею,один интерфейс – множество методов, что лежит в основе, понятие полиморфизм. Class XL Public Virtual int A (int x) { X*X}; Doble B (double) {a=b/3}; } Y y; y. a Class Y:puplic X { Public Int A (int X){ X=x*x} …. } Особенности работы с виртуальными функциями Использование механизмов виртуальных функций нельзя изменять тип обращаемого значения и список аргументов функций. Если 2 функции производных классов с одним и тем же именем имею разные аргументы и разные типы возвращаемых значений, причем в базовом классе функция объявлена как виртуальная, то механизм виртуальной функции игнорируется. Class А { Virtual void f1 (); Virtual void f2 (); Virtual void f3 (); Void f (); } В базовом классе Class B: public Int f2 (); Void f3 (int); Void f(); } Чистые виртуальные функции. Абстрактные классы Версии виртуальные функции, которая с одной стороны должна быть определена, а с другой никогда не должна использоваться, должна быть объявлена как чистая виртуальная функция. Формат объявления Virtual тип имя (список параметров)=0; Virtual void buied()=0: В классах производных от базовых при наличии своих версий виртуальных функций они должны быть либо определены, либо объявлены как чистые виртуальные функции. Класс с одной или большим количеством чистой виртуальной функции называется абстрактным классом.
Дата добавления: 2014-01-06; Просмотров: 321; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |