4968

Полиморфизм и виды его операций

Реферат

Информатика, кибернетика и программирование

Полиморфизм Полиморфизм – использование одного и того же имени функции, операции или класса для разных типов данных. Полиморфизм позволяет многократно не переписывать фрагменты программы, реализующие один и тот же алгоритм для разных типов...

Русский

2012-11-30

30.97 KB

3 чел.

Полиморфизм

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

Полиморфизм используется в так называемых абстрактных классах, предназначенных для описания структур данных: массивов, списков, деревьев и т.д. В качестве параметров таких классов задаются типы элементов структур данных.

Виды полиморфизма

Различают следующие виды полиморфизма:

- полиморфизм функций (переопределение функций)

- полиморфизм операций (переопределение операций)

- шаблоны

Полиморфизм операций (переопределение операций)

Переопределение операций – использование знаков операций над переменными стандартных типов данных для программирования операций над переменными пользовательских типов данных. Например, для объектов пользовательского класса можно придумать операции сложения, умножения, сравнения на равенство, сравнения на большинство/меньшинство и т.д.

Синтаксис операции похож на синтаксис обычной функции. Главным отличием операции от обычной функции является использование в качестве имени ключевого слова operator и знака переопределяемой операции.

Правила перегрузки операций

1. Можно перегружать любые операции ., *, ?:, ::, sizeof.

2. Все операции наследуются кроме присваивания.

3. При перегрузке операции с одним операндом она не должна иметь параметров

4. При перегрузке операции с двумя операндами она должна иметь один параметр (ссылку на объект).

5. Для организации последовательности операций они должны возвращать ссылку на объект.

6 Операции ++ и -- переопределяются в префиксной и постфиксной формах. Для префиксной формы входных параметров нет, для постфиксной – один целочисленный входной параметр.

7. Операция присваивания определяется по умолчанию.

Пример перегрузки операций

Перегрузка операции увеличения на 1 в классе вектор

Перегрузка операции сложения в классе Вектор

Перегрузка операции сравнения в классе Человек

#pragma once

class Person

{

public:

Person(void);

~Person(void);

private:

 char* Fio;

 int Age;

public:

 void SetAll(char* Fio1, int Age1);

 void Print(void);

 bool operator <(Person& P2);

};

#include "StdAfx.h"

#include ".\person.h"

#include <string.h>

Person::Person(void)

: Fio(NULL)

, Age(0)

{

}

Person::~Person(void)

{

}

void Person::SetAll(char* Fio1, int Age1)

{

Fio=new char[strlen(Fio1)];

strcpy(Fio,Fio1);

Age=Age1;

}

void Person::Print(void)

{

printf("%s %d\n",Fio,Age);

}

// Сравнение объектов на меньшинство по алфавиту и по возрасту

bool Person::operator <(Person& P2)

{

 if(strcmp(Fio,P2.Fio)<0)

 return true;

 else

 if(strcmp(Fio,P2.Fio)==0 && Age<P2.Age)

  return true;

 else

  return false;

 return false;

}

#include "stdafx.h"

#include ".\person.h"

main()

{

Person P1, P2;

P1.SetAll("Иванов", 35);

P2.SetAll("Петров", 20);

 if(P1<P2)

 printf("P1<P2-verno");

   

}


 

А также другие работы, которые могут Вас заинтересовать

15137. Защита конфиденциальной информации (на примере страховой компании 'РОСНО') 556.02 KB
  КУРСОВАЯ РАБОТА по дисциплине Теория организации на тему: Защита конфиденциальной информации в ОАО СК РОСНО 2010 Оглавление Введение...3 ГЛАВА 1. Теоретические ас
15138. Государственное регулирование межрегиональных экономических связей 53.06 KB
  При рассмотрении проблем региональной экономики, поиске путей их решения необходим учет теоретических разработок, касающихся исследований региональных систем в странах с развитой рыночной экономикой
15140. Антонио Гауди-и-Корнет 226.5 KB
  Реферат по истории искусств на тему: Антонио ГаудииКорнет архитектор. Анто́нио Пла́сид Гильем Гауди́иКорне́т исп. Antonio Plácido Guillermo Gaudí y Cornet; кат. Antoni Plàcid Guillem Gaudí i Cornet; 25 июня 1852 Реус Каталония 10 июня 1926 Барселона выдающийся каталонский архитектор бо...
15141. Брестский мир 22.81 KB
  Брестский мир 1918 г. Брестский мир 1918 мирный договор между Россией с одной стороны и Германией АвстроВенгрией Болгарией и Турцией с другой заключён в БрестЛитовск
15142. Василий Иванович Чапаев 19.31 KB
  Василий Иванович Чапаев Василий Иванович Чапаев легендарный полководец начдив командир Красной Армии. Всем нам он хорошо известен по замечательному произведению Дмитрия Фурманова €œЧапаев€ дававшему молодому поколению 20х годов боевую зарядку и стра...
15143. Иван александрович Хлестаков в комедии Ревизор 29.41 KB
  Иван Александрович Хлестаков в комедии Ревизор И.А.Хлестаков появляется в городке в тот момент когда там все ждут появления ревизора. Чиновники испуганы городничему от страха видятся во сне крысы. Степень боязни и страха чиновников пря...
15144. Иван Сергеевич Шмелёв 71.83 KB
  Иван Сергеевич Шмелёв Иван Сергеевич Шмелев родился в Кадашевской слободе Замоскворечья 21 сентября 1873 года. Дед Ивана Сергеевича государственный крестьянин из Гуслиц Богородского уезда Московской губернии поселился в Москве после пожара 1812 г. Отец писателя прин
15145. Наполеон Бонапарт 24.62 KB
  Наполеон Бонапарт Свою профессиональную военную службу начал в 1785 в чине младшего лейтенанта артиллерии; выдвинулся в период Великой французской революции достигнув при Директории чина бригадного после взятия Тулона 17 декабря 1793...