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


ООП-03 (Перегрузка функций).ppt

Содержание

Понятие полиморфизма Программный код называется полиморфным, если он позволяет обрабатывать данные различных типов с учетом их особенностей.Пример. Арифметические выражения, например, a+b , задают полиморфный код, поскольку они одинаково применяются для числовых данных

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

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

С++
Перегрузка функций
Аргументы по умолчанию

Тема: Перегрузка функцийПонятие полиморфизмаСпособы реализации полиморфизмаПолиморфизм в С и в С++Перегрузка функцийАргументы по умолчанию

Слайд 2Понятие полиморфизма
Программный код называется полиморфным, если он позволяет обрабатывать данные

различных типов с учетом их особенностей.
Пример. Арифметические выражения, например, a+b

, задают полиморфный код, поскольку они одинаково применяются для числовых данных разных типов (например, int, float, double).
Пример. Такая функция в языке С , например, как взятие модуля числа не является полиморфной (для типа int используем abs, а для типа float - fabs).
Понятие полиморфизма	Программный код называется полиморфным, если он позволяет обрабатывать данные различных типов с учетом их особенностей.Пример. Арифметические

Слайд 3Способы реализации полиморфизма
Неязыковой (текстовый) уровень
Преобразование типа
Обобщенное (родовое) программирование
Перегрузка имен

Способы реализации полиморфизмаНеязыковой (текстовый) уровеньПреобразование типаОбобщенное (родовое) программированиеПерегрузка имен

Слайд 4Полиморфизм в С
Язык С не обладает средствами создания полиморфного программного

кода.
В С возможно применение препроцессора
Пример.
#define max(a,b) ( (a)

> (b) ? (a) : (b) )
#define min(a,b) ( (a) > (b) ? (b) : (a) )
#define average(a,b) ( (a) + (b) / 2 )
Стандартные преобразования встроенных типов чаще чревато ошибками (вспомним abs и fabs), чем полезным использованием
Вывод. В программах на С, возможен лишь простейший полиморфизм.
Полиморфизм в С	Язык С не обладает средствами создания полиморфного программного кода.В С возможно применение препроцессораПример. #define max(a,b)

Слайд 5Полиморфизм в С++
Текстовый уровень – препроцессор
Управление преобразованием типа – конструкторы

класса
Обобщенное программирование – шаблоны
Перегрузка имен функций – декорирование

Полиморфизм в С++Текстовый уровень – препроцессорУправление преобразованием типа – конструкторы классаОбобщенное программирование – шаблоныПерегрузка имен функций –

Слайд 6Перегрузка методов
const int max_string_length = 128;
class String {
public:
void set_to(

char* );
int length( );
int read( ); // чтение из stdin
void print(

); // вывод в stdout
String substring (int start, int len);
// возвращает подстроку не изменяя оригинала
String concat ( String* );
String concat ( char* );
private:
// объект типа String – это последовательность из не более чем
// max_string_length символов, оканчивающаяся символом NULL
char text [ max_string_length+1 ];
};
Перегрузка методовconst int max_string_length = 128;class String {	public: 		void set_to( char* );		int length( );		int read( );	// чтение

Слайд 7Функция String::concat
#include “mystring.h”
#include // для стандартных строковых функций
#include
#include

// для exit()
String String::concat ( String* s ) {

// как прежде }
String String::concat ( char* s ) {
if( length()+strlen(s) > max_string_length ) {
fprintf( stderr, “string too large: \"%s %s\".\n", text, s );
exit(1);
}
String both;
strcpy( both.text, text );
strcat( both.text, s );
return both;
}
Функция String::concat#include “mystring.h”#include  // для стандартных строковых функций#include #include  // для exit()	String String::concat ( String*

Слайд 8#include “mystring.h”
#include
void main( int, char** ) {
String firstname, lastname,

name;
firstname.set_to ( “Bilbo”);
lastname.set_to ( “Baggins”);
name = firstname.concat ( “ ”

);
name = name.concat ( &lastname );
// или: name = firstname.concat ( “ ” ).concat ( &lastname );
printf( “name is: ” );
name.print ( );
}

Использование String::concat

#include “mystring.h”#include void main( int, char** ) {	String firstname, lastname, name;	firstname.set_to ( “Bilbo”);	lastname.set_to ( “Baggins”);	name = firstname.concat

Слайд 9Перегрузка обычных функций
#include “mystring.h”
String sentence( String words, char* punctuation );
String

sentence( String words );
void main( int, char** ) {
String statement,

question;
statement.set_to ( “Hello, Bilbo”);
question.set_to ( “Do you have any tea”);
sentence(statement).print( );
sentence( question, “?” ).print( );
}
String sentence( String words, char* punctuation ) {
String result;
resalt = words.concat ( punctuation );
return result;
}
String sentence( String words ) {
String result;
resalt = words.concat ( “.” );
return result;
}
Перегрузка обычных функций#include “mystring.h”	String sentence( String words, char* punctuation );	String sentence( String words );void main( int, char**

Слайд 10Аргументы по умолчанию
#include “mystring.h”
String sentence( String words, char* punctuation=“.” );
void

main( int, char** ) {
String statement, question;
statement.set_to ( “Hello, Bilbo”);
question.set_to

( “Do you have any tea”);
sentence(statement).print( );
sentence( question, “?” ).print( );
}
String sentence( String words, char* punctuation ) {
String result;
resalt = words.concat ( punctuation );
return result;
}
Аргументы по умолчанию#include “mystring.h”	String sentence( String words, char* punctuation=“.” );void main( int, char** ) {	String statement, question;	statement.set_to

Слайд 11Вызов С-функций
extern “C” double sqrt(double);
extern “C” {
int printf( const char*

, … );
int puts( const t char* );
}
void main( int,

char** ) {
float f = sqrt(2);
puts( “ Hello, World \n ” );
printf( “ sqrt(2) = %f \n”, f );
}
Вызов С-функцийextern “C” double sqrt(double);extern “C” {	int printf( const char* , … );	int puts( const t char*

Слайд 12РЕЗЮМЕ
В С разрешение ссылки на функцию определяется ее именем
В С++

ссылка на функцию определяется
Именем функции
Типом вызывающего объекта (для методов)
Числу и

типу аргументов
Аргументы можно задавать по умолчанию
РЕЗЮМЕВ С разрешение ссылки на функцию определяется ее именемВ С++ ссылка на функцию определяетсяИменем функцииТипом вызывающего объекта

Слайд 13Упражнение
Добавьте в класс String методы is_the_same_as и is_different_from, с помощью

которых можно сравнивать строки типа String и стандартные строки С.

Прототипы функций имеют вид:
int String::is_the_same_as( char* );
int String::is_different_from( char* );
Протестируйте следующий синтаксис:
УпражнениеДобавьте в класс String методы is_the_same_as и is_different_from, с помощью которых можно сравнивать строки типа String и

Слайд 14#include “mystring.h"
#include
void main(int, char *[]) {
String

h1, h2, w;
h1.set_to("hello");
h2.set_to("hello");

w.set_to("world");

printf("\n String::is_the_same_as ");
if ( h1.is_the_same_as(h2) &&
!h1.is_the_same_as(w) )
printf("works.\n");
else
printf("doesn't work.\n");

printf("\n String::is_different_from ");
if (!h1.is_different_from(h2) &&
h1.is_different_from(w))
printf("works.\n");
else
printf("doesn't work.\n");


printf("\nString::is_the_same_as(char*)");
if ( h1.is_the_same_as(“hello”) &&
!h1.is_the_same_as(“world”) )
printf("works.\n");
else
printf("doesn't work.\n");

printf("\nString::is_different_from(char*)");
if (!h1.is_different_from(“hello”) &&
h1.is_different_from(“world”) )
printf("works.\n");
else
printf("doesn't work.\n");

}





#include “mystring.h

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

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

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

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

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


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

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