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");

   

}


 

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

79074. Эмфитевзис и суперфиций. Сущность и причины образования этих институтов. Прекращение эмфитевзиса и суперфиция. Залог и его формы. Ипотека 27.26 KB
  Установление одного из этих двух прав на земельный участок дает право собственности на эту землю почти только номинальным; лишь после прекращения эмфитевзиса или суперфиция право собственности на данный участок получает реальное выражение. Как показывает термин emphyteusis от греческого emphyteuein насаждать этот институт перешел в римское право из Греции где наследственная аренда земли имела широкое применение эмфитевзис был издавна также в практике Египта и Карфагена.В содержание эмфитевзиса входит право пользоваться земельным...
79075. Безымянные контракты. Их характеристика. Типы безымянных контрактов. Виды пактов 32.41 KB
  сведены к четырем основным типам: 1 do ut des: я передаю тебе право собственности на вещь с тем чтобы ты передал мне право собственности на другую вещь; 2 do ut fcis: я передаю тебе право собственности на вещь с тем чтобы ты совершил известное действие оказал какието услуги и т.; 3 fcio ut des: я совершаю для тебя известное действие с тем чтобы ты передал мне право собственности на известную вещь; 4 fcio ut fcis: я совершаю для тебя известное действие с тем чтобы и ты совершил для меня какоето действие. При куплепродаже...
79077. Вербальные договоры. Стипуляция. Порядок заключения и содержание 25.9 KB
  Открытые в 1933 году новые фрагменты из Институций Гая доказывают что договор стипуляции был известен уже законам XII таблиц.Несмотря однако на все смягчения необходимых формальностей в классическом римском праве всетаки прочно охранялись некоторые черты стипуляции как формального контракта: присутствие договаривающхся сторон в одном месте устный вопрос кредитора и такой же устный ответ должника совпадающий по смыслу с вопросом. Обязательство возникшее из стипуляции было обязательством строгого права и потому подлежало строго...
79078. Виды деликтов и обязательства из них. Личная обида. Кража. Неправомерное повреждение имущества. Другие виды частных деликтов 26.1 KB
  Наиболее подходящий русский термин соответствующий furtum кража. Однако furtum не совпадало полностью с современным понятием кражи. Во-первых к категории furtum в Риме относились и те деликты которые в современном праве именуются кражей и те которые теперь называются присвоением растратой и т.
79079. Владение и право собственности. Владение и держание. Виды. Установление и прекращение владения. Преторские интердикты. Защита добросовестного владения 33.21 KB
  Факты с наступлением которых лицо приобретает право собственности называются способами приобретения права собственности modus cquirendi а те юридические факты в особенности сделки которые служат основанием для приобретения права собственности называются титулом приобретения titulus cquirendi.Способы приобретения права собственности делятся на первоначальные и производные. При первоначальном приобретении права собственности нет праводателя ограниченность правомочий которого могла отразиться на содержании права приобретателя.
79080. Деятельность римских юристов. Формы их деятельности. Значение римской юриспруденции для формирования и развития права. Сабиньянская и прокулянская школы юристов 21.39 KB
  Сабиньянская и прокулянская школы юристов. В произведениях Цицерона формы деятельности римских юристов характеризуются терминами respondere cvere gere а также scribere. Термином respondere обозначается консультационная работа римских юристов дача гражданам обращавшимся к юристам советов по возбуждавшим сомнение вопросам: cvere ограждение интересов данного гражданина при совершении сделок также путем совета не включать какоелибо невыгодное условие и т.
79081. Договор имущественного найма и его виды. Договор найма вещи Поднаем. Прекращение договора найма вещи. Наем услуг. Договор подряда 31.33 KB
  Классическое римское право знало три вида договора locatio-conductio: 1) наем вещей (locatio-conductio rerum); 2) наем услуг (locatio-conductio operarum); 3) наем работы или подряд (locatio-conductio opens или opens faciendi).
79082. Договор поручения. Содержание. Особенности правоотношений, возникающих из договора поручения. Прекращение договора поручения 25.5 KB
  Особенности правоотношений возникающих из договора поручения. Прекращение договора поручения. Договор поручения состоял в том что одно лицо дозритель мандант поручало а другое лицо мандатарий поверенный принимало на себя исполнение безвозмездно какихлибо действий.