Студопедия

КАТЕГОРИИ:


Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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