Виртуальные функции придают объекту производного
4 class caption
5 {
6 CWnd *target_window;
7
8 private: friend class
window;
9 caption( CWnd *p ) : target_window(p) {}
10
11 public:
12 operator CString ( void ) const;
13 const caption &operator=( const CString &s );
14 };
15
16 caption text( void );
17 };
18 //–-------------------------------------------------------
19 caption window::text( void )
20 {
21 return caption( this );
22 }
23 //--------------------------------------------------------
24 window::caption::operator CString( void ) const
25 {
26 CString output;
27 target_window->GetWindowText( output );
28 return output; // возвращает копию
29 }
30 //--------------------------------------------------------
31 const caption &window::caption::operator=(const
CString &s)
32 {
33 target_window->SetWindowText( s );
34 return *this;
35 }
Листинг 12. Заголовочный объект
1 class caption
2 {
3 CWnd target_window;
4 public:
5 window_text( CWnd *win ) : target_window( win ) {};
6
7 operator const CString( void );
8 const CString &operator=( const CString &r );
9 };
10
11 inline caption::operator CString( void
);
12 {
13 CString output;
14 target_window->GetWindowText( output );
15 return output;
16 }
17
18 inline const
CString &caption::operator=(const
CString &s )
19 {
20 // возвращает тип CString (вместо типа заголовка
21 // "caption"), поэтому будет срабатывать a = b = "абв"
22
23 target_window->SetWindowText( s );
24 return s;
26 }
Часть 8д. Виртуальные функции
Виртуальные функции придают объекту производного класса способность модифицировать поведение, определенное на уровне базового класса (или предоставить какие-то возможности, в которых базовый класс испытывал потребность, но не мог их реализовать обычно из-за того, что информация, нужная для этой реализации, объявляется на уровне производного класса). Виртуальные функции являются центральными для объектно-ориентированного проектирования, потому что они позволяют вам определить базовый класс общего назначения, не требуя знания особенностей, которые могут быть предусмотрены лишь производным классом. Вы можете писать программу, которая думает, что манипулирует объектами базового класса, но на самом деле во время выполнения воздействует на объекты производного класса. Например, вы можете написать код, помещающий объект в обобщенную структуру данных data_structure, но на самом деле во время выполнения он вставляет его в tree или linked_list (классы, производные от data_structure). Это настолько фундаментальная объектно-ориентированная операция, что программа на Си++, которая не использует виртуальные функции, вероятно, просто плохо спроектирована.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий