Разделы презентаций


Множественное наследование

Постановка проблемы: класс WindowБывает, что класс можно считать потомком различных базовых классов Окно Window используется для вывода данных (Display_medium)Окно Window само отображается и перемещается на рабочем столе (Display_object)

Слайды и текст этой презентации

Слайд 1Тема: Множественное наследование
Постановка задачи
Синтаксис оформления
Инвариант абстракции действия
Возникновение неоднозначностей
Преодоление неоднозначностей

Тема: Множественное наследованиеПостановка задачиСинтаксис оформленияИнвариант абстракции действияВозникновение неоднозначностейПреодоление неоднозначностей

Слайд 2Постановка проблемы: класс Window
Бывает, что класс можно считать потомком различных

базовых классов

Окно Window используется для вывода данных (Display_medium)

Окно Window

само отображается и перемещается на рабочем столе (Display_object)
Постановка проблемы: класс WindowБывает, что класс можно считать потомком различных базовых классов Окно Window используется для вывода

Слайд 3Схема наследования
класс Window
класс Display_object
класс Display_medium

Схема наследованиякласс Windowкласс Display_objectкласс Display_medium

Слайд 4Класс Display_object
class Display_object {
public:
virtual void move( const Point&

new_location )=0;
virtual Point location( ) const = 0;
//

функция location должна вернуть точку, в которую
// объект был перемещен в последний раз
};
Класс Display_objectclass Display_object { public:	 virtual void move( const Point& new_location )=0;	 virtual Point location( ) const

Слайд 5Использование Display_object
void bounce( Display_object& d ) {
Point at = d.location();
Point

up = at – Point( 0, 2 );
Point down =

at + Point( 0, 2 );

d.move(up);
d.move(down);
d.move(up);
d.move(down);
d.move(at);
}
Использование Display_objectvoid bounce( Display_object& d ) {	Point at = d.location();	Point up = at – Point( 0, 2

Слайд 6Класс Display_medium

class Display_medium {
public:
virtual Point size( ) const =

0;
virtual Point cursor( ) const = 0;
virtual int move_cursor(const

Point& p ) = 0;
virtual Display_char character( ) const = 0;
virtual String line( ) const = 0;
virtual void add( Display_char ch ) = 0;
virtual void add( const String& s ) = 0;
virtual void clear( );
private:
};
Класс Display_mediumclass Display_medium { public:	virtual Point size( ) const = 0; 	virtual Point cursor( ) const =

Слайд 7Класс Window
class Window : public Display_medium, Display_object {
public:
Window( const

Point& upleft, const Point& size,
const String&

title);
~Window( );
void move(const Point& new_upleft);
Point location() const;
Point upper_left() const;
Point lower_right() const;
Point size() const;
virtual void change_size(const Point& new_size);
// если новый размер меньше минимального, то окно
// уменьшается только до минимального размера
Класс Windowclass Window : public Display_medium, Display_object { public:	Window( const Point& upleft, const Point& size,

Слайд 8Класс Window (продолжение)

int move_cursor( const Point& where );

Point cursor( ) const;
Display_char character( ) const;

String line( ) const;
void add( Display_char c );
void add( const String& str );
void clear( );
void scroll_up( );
void scroll_down( );
private :
};
Класс Window (продолжение)  int move_cursor( const Point& where );  Point cursor( ) const;  Display_char

Слайд 9Инвариант абстракции действия
location( ) - чистый виртуальный метод класса Display_object


Нет реализации, но есть спецификация, которая задает инвариант абстракции действия
Производные

классы обеспечивают реализацию, которая должна соответствовать спецификации
Если соответствие нельзя обеспечить, то лучше отказаться от наследования
Инвариант абстракции действияlocation( ) - чистый виртуальный метод класса Display_object Нет реализации, но есть спецификация, которая задает

Слайд 10Методы move() и location()

void Window :: move ( const Point&

new_location ) {
_upper_left = new_location ;
}

Point Window :: upper_left

( ) const {
return _upper_left ;
}

Point Window :: location ( ) const {
return upper_left( ) ;
}

Методы move() и location()void Window :: move ( const Point& new_location ) {	_upper_left = new_location ; }Point

Слайд 11Использование объектов Window

void say_hello( Display_medium& m ) {
m.add( “Hello,

world \n” );
}

void main( void ) {
Window w(

Point(2,2), Point(60,10), “test” );
say_hello( w ) ;
bounce( w ) ;
}
Использование объектов Window void say_hello( Display_medium& m ) {		m.add( “Hello, world \n” );}void main( void ) {

Слайд 12Неоднозначности
Если класс наследует от различных базовых классов функции с одинаковыми

именами и параметрами, то обращения к таким функциям могут быть

неоднозначными
НеоднозначностиЕсли класс наследует от различных базовых классов функции с одинаковыми именами и параметрами, то обращения к таким

Слайд 13Метод clear()
class Display_medium {
public:
virtual void clear( );
// ……………
};
class

Display_object {
public:
virtual void clear( );

// ……………
};

class Window : public Display_medium, Display_object {
public:
// нет функции clear ()
};
void main(void) {
Window w( Point(1,1), Point(10,10), “test” );
w.clear( ); // ошибка (какая из clear() ? )
}

Метод clear()class Display_medium { public:	 virtual void clear( );	// ……………};class Display_object { public:   virtual void

Слайд 14Разрешение неоднозначностей
class Window : public Display_medium, Display_object
{
public:
//

нет функции clear ()
};
void main(void) {
Window w( Point(1,1),

Point(10,10), “test” );
w.Display_medium::clear( );
w.Display_object::clear( );
}
Разрешение неоднозначностейclass Window : public Display_medium, Display_object { public:	 // нет функции clear ()};void main(void) {

Слайд 15Предотвращение неоднозначностей
class Window : public Display_medium, Display_object
{
public:
void

clear();
};
void Window::clear() {
Display_medium::clear( ); Display_object::clear( );
}
void main(void) {

Window w( Point(1,1), Point(10,10), “test” );
w.clear( );
}
Предотвращение неоднозначностейclass Window : public Display_medium, Display_object { public:	 void clear();};void Window::clear() {  Display_medium::clear( ); Display_object::clear(

Слайд 16РЕЗЮМЕ
У класса может быть сразу несколько базовых классов
Класс должен делать

то, что и каждый из базовых классов
Могут возникнуть неоднозначности
разрешаются путем

использования операции области видимости
предотвращаются подменой в производном классе одноименной функции базовых классов
РЕЗЮМЕУ класса может быть сразу несколько базовых классовКласс должен делать то, что и каждый из базовых классовМогут

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика