Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Zaochniki / 07_relation

.pdf
Скачиваний:
7
Добавлен:
13.02.2016
Размер:
313.92 Кб
Скачать

Отношение Есть разновидность

Наследование интерфейса и реализации

Если функция не определена в производном классе, то происходит е¼ наследование из базового. При этом наследуются:

интерфейс функции, то есть то, что такая функция есть, и у не¼ есть определ¼нные аргументы ( y () все птицы летают);

реализация функции, то есть то действие, которое выполняет функция ( y () / действия / åñëè íå

сказано иначе, птицы летают так).

Часто бывают случаи, когда надо наследовать интерфейс, но нельзя наследовать реализацию. Например, если мы напишем класс Ostrich (страус), и забудем определить функцию y, то страус будет летать как большинство птиц.

Отношение Есть разновидность

Чистые виртуальные функции и абстрактные классы

Что бы наследовать интерфейс, но не наследовать реализацию, используются чистые виртуальные функции . При описании такой функции после параметров добавляется =0 ;

c l a s s B i r d

{

p u b l i c :

 

v i r t u a l

void f l y ( ) = 0 ; // чистая виртуальная ф.

// . . .

 

} ;

 

 

 

Класс в котором есть хотя бы одна чистая виртуальная функция, является абстрактным классом. Объекты абстрактных классов создавать нельзя эти классы описывают абстрактное понятие (например: птицы).

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

Отношение Есть разновидность

Чистые виртуальные функции и абстрактные классы (2)

 

c l a s s

B i r d {

//

абстрактный

 

класс

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p u b l i c :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v i r t u a l

void

f l y ( )

= 0 ;

 

//

чистая

виртуальная ф.

 

} ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void

B i r d : : f l y ( )

{

/ может

áûòü

òåëî / }

 

 

c l a s s

Sparrow :

p u b l i c

B i r d

{

//

конкретный класс

 

 

 

 

 

 

 

p u b l i c :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v i r t u a l void f l y ( ) { B i r d : : f l y ( ) } ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

} ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c l a s s

Hen :

p u b l i c

B i r d

{ //

 

конкретный

класс

 

 

 

 

 

 

 

 

 

 

 

p u b l i c :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v i r t u a l void f l y ( ) { s l o w _ f l y ( ) } ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

} ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c l a s s

O s t r i c h :

p u b l i c

B i r d

{

//

абстрактный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p u b l i c :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

} ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отношение Реализован посредством

Реализация отношения Реализован посредством в C++

Отношение Реализован посредством реализуется посредством закрытого наследования или вложения

c l a s s R e c t a n g l e { p u b l i c :

R e c t a n g l e ( i n t aw , i n t ah ) ;

i n t width ( ) const { r e t u r n w; } ; i n t h e i g h t ( ) const { r e t u r n h ; } ;

protected : i n t w, h ;

} ;

c l a s s Square : p r i v a t e R e c t a n g l e { p u b l i c :

Square ( i n t w ) : R e c t a n g l e ( w, w ) ; i n t width ( ) const

{ r e t u r n R e c t a n g l e : : width ( ) } ;

}

Соседние файлы в папке Zaochniki