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


Доступ производного класса к базовому

Содержание

Пример: Класс BufferРеализует понятие буфера данныхИспользуется как базовыйЯвляется абстрактным классомДля простоты ограничимся буферизацией при выводе данных

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

Слайд 1Тема: Доступ в производном классе к базовому классу
Пример – буферизация

вывода данных
Проблема доступа
Защищенные члены класса
Правила доступа

Тема: Доступ в производном классе к базовому классуПример – буферизация вывода данныхПроблема доступаЗащищенные члены классаПравила доступа

Слайд 2Пример: Класс Buffer
Реализует понятие буфера данных
Используется как базовый
Является абстрактным классом
Для

простоты ограничимся буферизацией при выводе данных

Пример: Класс BufferРеализует понятие буфера данныхИспользуется как базовыйЯвляется абстрактным классомДля простоты ограничимся буферизацией при выводе данных

Слайд 3Наследование
класс Buffer
класс File_Buffer
класс Terrminal_Buffer

Наследованиекласс Bufferкласс File_Bufferкласс Terrminal_Buffer

Слайд 4Класс Buffer
class Buffer {
public:
Buffer( int size );
virtual ~Buffer( );
void

add( char );
private:
virtual void flush( ) = 0 ;


// посылает символы из буфера устройству
int _size_limit;
char* data;
// указывает на массив из _size_limit символов
int _contains;
// реально содержится символов в буфере
};
Класс Bufferclass Buffer { public:	Buffer( int size );	virtual ~Buffer( );	void add( char ); private:	virtual void flush( )

Слайд 5Методы класса Buffer

Buffer :: Buffer ( int size ) {
data

= new char[size] ;
if( data == 0 ) { cerr

<< “Нет памяти.\n”; exit( ); }
_size_limit = size;
_contains = 0;
}
Buffer :: ~Buffer ( ) { delete data; }
void Buffer ::add( char ch ) {
if(_contains ==_size_limit ) { flush(); _contains = 0; }
data[_contains++] = ch;
}
Методы класса BufferBuffer :: Buffer ( int size ) {	data = new char[size] ; 	if( data ==

Слайд 6Проблема
flush( ) - должна брать символы из массива data и

посылать их устройству
flush( ) - чистая виртуальная функция и ее

реализация будет в производных классах
ПРОБЛЕМА
функция производного класса не имеет доступа к закрытому свойству базового класса
Проблемаflush( ) - должна брать символы из массива data и посылать их устройствуflush( ) - чистая виртуальная

Слайд 7Решение проблемы
добавить методы get( ) и contains( ) в класс

Buffer
сделать эти методы защищенными
производные классы имеют доступ
пользователи не имеют доступа

Решение проблемыдобавить методы get( ) и contains( ) в класс Bufferсделать эти методы защищеннымипроизводные классы имеют доступпользователи

Слайд 8Класс Buffer : защищенные методы
class Buffer {
public:

Buffer( int size );
virtual ~Buffer( );
void add( char

);
protected:
int contains( );
char get( int index );
private:
virtual void flush( ) = 0 ;
int _size_limit;
char* data;
int _contains;
};
Класс Buffer : защищенные методы class Buffer {  public:	 Buffer( int size );	 virtual ~Buffer( );

Слайд 9Защищенные методы класса Buffer


#include “buffer.h”
int Buffer :: contains ( )

{
return _contains;
}
char Buffer :: get ( int index

) {
return data[ index ];
}
Защищенные методы класса Buffer#include “buffer.h”int Buffer :: contains ( ) {	return  _contains; }char Buffer :: get

Слайд 10Класс File_Buffer
#include “buffer.h”
#include
class File_Buffer : public Buffer {

public:
File_Buffer( const char* name, int size

);
~File_Buffer( );
private:
void flush( ) ;
ofstream str;
};
Класс File_Buffer#include “buffer.h”#include class File_Buffer : public Buffer {  public:    File_Buffer( const char*

Слайд 11Методы класса File_Buffer

#include “file_buffer.h”
File_Buffer :: File_Buffer ( const char* name,

int size )
: Buffer( size ), str( name )

{ }
File_Buffer :: ~File_Buffer ( ) {
if( contains( ) > 0 ) flush( );
}
void File_Buffer :: flush ( ) {
int i;
for( i = 0 ; i < contains( ) ; i++ ) str << get(i);
str.flush();
}
Методы класса File_Buffer#include “file_buffer.h”File_Buffer :: File_Buffer ( const char* name, int size ) 				: Buffer( size ),

Слайд 12Использование буфера

#include “file_buffer.h”
#include
#include
void do_test ( ) {
File_Buffer

test ( “test_file”, 5 );
char ch;
cout

начале: \n”;
system( “dir test_file > log_file” );
for( ch=‘a’ ; ch <= ‘e’ ; ch++ )
test.add(ch);


cout << “После 5 символов: \n”;
system( “dir test_file > log_file” );
test.add( ‘f’ );
cout << “После 6 символов: \n”;
system( “dir test_file > log_file” );
}
void main ( void ) {
do_test ( );
cout << “После do_test : \n”;
system( “dir test_file > log_file” );
}

Использование буфера#include “file_buffer.h”#include #include void do_test ( ) { File_Buffer test ( “test_file”, 5 ); char ch;

Слайд 13Класс Terminal_Buffer
#include “buffer.h”
class Terminal_Buffer : public Buffer {
public:

Terminal_Buffer( int size );
~Terminal_Buffer( );

private:
void flush( ) ;
};
Класс Terminal_Buffer#include “buffer.h”class Terminal_Buffer : public Buffer {  public:    Terminal_Buffer( int size );

Слайд 14Методы класса Terminal_Buffer

#include “term_buffer.h”
Terminal_Buffer :: Terminal_Buffer ( int size )


: Buffer( size ) { }
Terminal_Buffer :: ~Terminal_Buffer ( )

{
if( contains( ) > 0 ) flush( );
}
void Terminal_Buffer :: flush ( ) {
int i;
for( i = 0 ; i < contains( ) ; i++ ) cerr << get(i);
}
Методы класса Terminal_Buffer#include “term_buffer.h”Terminal_Buffer :: Terminal_Buffer ( int size ) 				: Buffer( size ) { }Terminal_Buffer ::

Слайд 15Наследование

Наследование

Слайд 16РЕЗЮМЕ
Пользователи класса имеют доступ только к открытым членам класса
Производный класс

имеет доступ к открытым и защищенным членам класса
При использовании класса

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

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

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

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

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

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


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

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