Описание и использование интерфейсов — КиберПедия 

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Описание и использование интерфейсов

2019-08-07 282
Описание и использование интерфейсов 0.00 из 5.00 0 оценок
Заказать работу

Описание ООП-интерфейса, если отвлечься от деталей синтаксиса конкретных языков, состоит из двух частей: имени и методов интерфейса.

· Имя интерфейса строится по тем же правилам, что и другие идентификаторы используемого языка программирования. Разные языки и среды разработки имеют различные соглашения по оформлению кода, в соответствии с которыми имена интерфейсов могут формироваться по некоторым правилам, которые помогают отличать имя интерфейса от имён других элементов программы. Например, в технологии COM и во всех поддерживающих её языках действует соглашение, следуя которому, имя интерфейса строится по шаблону «I<Имя>», то есть состоит из написанного с заглавной буквы осмысленного имени, которому предшествует заглавная латинская буква I (IUnknown, IDispatch, IStringListи т. п.).

· Методы интерфейса. В описании интерфейса определяются имена и сигнатуры входящих в него методов, то есть процедур или функций класса.

Использование интерфейсов возможно двумя способами:

· Класс может реализовывать интерфейс. Реализация интерфейса заключается в том, что в описании класса данный интерфейс указывается как реализуемый, а в коде класса обязательно определяются все методы, которые описаны в интерфейсе, в полном соответствии с сигнатурами из описания этого интерфейса. То есть, если класс реализует интерфейс, для любого экземпляра этого класса существуют и могут быть вызваны все описанные в интерфейсе методы. Один класс может реализовать несколько интерфейсов одновременно.

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

 

Шаблонные классы

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

 Объявление шаблона класса:

 template  Список_параметров шаблона   class Имя класса {...};

Процесс генерации объявления класса по шаблону класса и фактическим аргументам шаблона называется инстанцированием шаблона. Обычно он совмещается с объявлением объекта соответствующего конкретного типа.
Синтаксис такого объявления:

 Имя класса      Список_параметров шаблона      Идентификатор объекта;

 Функции-члены класса-шаблона автоматически становятся функциями-шаблонами. Для них не обязательно явно задавать ключевое слово template.

Дружественная функция, которая использует параметры шаблона, сама является шаблоном. Конкретная реализация такой функции с учётом специфицированных параметров (порожденная функция) является дружественной для такого инстанцирования класса, которое совпадает по типам с фактическими типами аргументов порожденной функции.

Пример:

template  <class T> class Y{...};

 template <class T> class X

 {

//...

 public:

friend void f1();

                                                                                             // функция f1() является

                                                                                             // дружественной ко всем

                                                                                             // инстанцированиям

                                                                                             // класса

friend Y f2(Y par1);

                                                                                             // порождение функции f2()

                                                                                            // для фактического типа T

                                                                                            // является дружественной

                                                                                           // только к тому

                                                                                           // инстанцированию класса

                                                                                           // X, которое подходит по

                                                                                          // фактическому

                                                                                          // типу–параметру.

//...

 };

template Y f2(Y par1)

{ /*... */ }

Статические члены создаются для каждого инстанцирования класса.

Пример:

 template class X {

static T x1;

//...

};

int X:: x1 = 0;

 double X:: x1 = 1.5;

 int main() {

X <int>xx1;

X <double>xx2;

...

 return 0; }

61) /* Создается класс Student. Формируется динамический массив объектов. При

тестировании выводится: сформированный список студентов, список студентов

заданного факультета, список студентов для заданных факультета и курса.*/

#include <conio.h>

#include <string.h>

#include <iostream.h>

struct date // дата рождения

{char daymon[6];

int year; };

//======= class Student =================

class Student{

char name[30]; //private

date t;

char adr[30], fac[20];

int kurs;

public:

Student();

char *getfac();

int getkurs();

void show();

};

Student::Student()

{cout<<"Input name:"; cin>>name;

cout<<"Input date of born\n";

cout<<"Day.mon:"; cin>>t.daymon;

cout<<"Year:"; cin>>t.year;

cout<<"Input adr:"; cin>>adr;

cout<<"Input fac:"; cin>>fac;

cout<<"Input kurs:"; cin>>kurs;

}

void Student::show()

{

cout<<"Name:"<<name<<endl;

cout<<"Was born:"<<t.daymon<<'.'<<t.year<<endl;

cout<<"Address:"<<adr<<endl;

cout<<"Fac:"<<fac<<endl;

cout<<"Kurs:"<<kurs<<endl;

}

char *Student::getfac() { return fac; }

int Student::getkurs() { return kurs; }

void spisfac(Student spis[],int n)//список студентов заданного факультетата

{char fac[20];

cout<<"Input faculty:"; cin>>fac;

for(int i=0;i<n;i++)

if(strcmp(spis[i].getfac(),fac)==0)spis[i].show();

}

void spisfackurs(Student spis[],int n)

//список студентов заданных факультета и курса

{int i,k;

char fac[20];

cout<<"Input faculty:"; cin>>fac;

cout<<"Input the course:"; cin>>k;

for(i=0;i<n;i++)

if ((strcmp(spis[i].getfac(),fac)==0)&&(spis[i].getkurs()==k))

spis[i].show();

}

//========= main ================

void main()

{ Student *spis;

int n;

cout<<"Input a number of students: "; cin>>n;

spis=new Student [n];

for(int i=0;i<n;i++) {

cout<<"=============================="<<endl;

spis[i].show();

}

spisfac(spis,n);

spisfackurs(spis,n);

delete [] spis;

cout<<"press any key!"

while(!kbhit());

}

 

ООП67)

Разработать класс Train (Пункт назначения, Номер поезда, Время отправления, Число общих мест, Купейных, Плацкартных). Включить в класс методы set (…), get (…), show (…). Определить другие методы. Создать массив объектов. Вывести список поездов, следующих до заданного пункта назначения.

67)#include <iostream>
#include <conio.h>
#include <string.h>

using namespace std;

class train
{
char punkt [20];
int num_train;
double time;
int Placard;
int Kupeynykh;
int common;
public:
train();
char *getpunkt();
int getnum_train();
double gettime();
int getPlacard();
int getKupeynykh();
int getcommon();
void show();
};

train::train()
{
cout «"input punkt:";cin»punkt;
cout «"input num_train:";cin»num_train;
cout «"input time:";cin»time;
cout «"input Placard:";cin»Placard;
cout «"input Kupeynykh:";cin»Kupeynykh;
cout «"input common:";cin»common;
}

void train::show()
{
cout«"punkt:"«punkt«endl;
cout«"num_train:"«num_train«endl;
cout«"time:"«time«endl;
cout«"Placard:"«Placard«endl;
cout«"Kupeynykh:"«Kupeynykh«endl;
cout«"common:"«common«endl;
}
char *train::getpunkt() {return punkt;}
int train::getnum_train() { return num_train; }
double train::gettime() { return time; }
int train::getPlacard() { return Placard; }
int train::getKupeynykh() { return Kupeynykh; }
int train::getcommon() { return common; }
void spistrian(train spis[],int n)
{
// int train;
// cout«"input train:"; cin»train;
for (int i=0;i<n;i++)
// if(strcmp(spis[i].getnum_train(),train)==0)
spis[i].show();
}
void spistrianpunkt(train spis [], int n)
{
int i,k;
char punkt[20];
//int trian();
//cout«"input trian:"; cin»trian;
cout«"input serchin punkt:"; cin»punkt;
for(i=0;i<n;i++)
if ((strcmp(spis[i].getpunkt(),punkt)==0))
spis[i].show();
}

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {

train *spis;
int n;
cout«"input a number of train:"; cin»n;
spis=new train [n];
for (int i=0;i<n;i++)
{
cout«"=========="«endl;
spis[i].show();
}
//cout«"=======================";
spistrianpunkt(spis,n);
delete [] spis;
cout«"press sny key!";
while(!kbhit());
return 0;
}

Разработать класс Patient (Фамилия, Имя, Отчество, Адрес, Номер медицинской карты, Диагноз). Включить в класс методы set (…), get (…), show (…). Определить другие методы. Создать массив объектов. Вывести список пациентов, имеющих данный диагноз.

73)#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;

class patient{
char familya[30];
char imiya[30];
char otchestvo[30];
int nomer karty;
char adres[20],diagnoz[20];

public:
patient();
char *getfamiliya();
char *getimiya();
char *getotchestvo();
char *getdiagnoz();
char);
int getnomer karty(;
void show();
};
patient::patient()
{cout«"Input familya:"; cin»familya;
cout«"Input imiya";cin»imiya;
cout«"Input otchestvo:"; cin»otchestvo;
cout«"Input diagnoz:"; cin»diagnoz;
cout«"Input adres";cin»adres;
cout«"Input nomer karty:"; cin»nomer karty;
}
void patient::show()
{
cout«"familya:"«familya«endl;
cout«"imiya:"«imiya«endl;
cout«"otchestvo:"«otchestvo«endl;
cout«"diagnoz:"«diagnoz«endl;
cout«"adres:"«adres«endl;
cout«"nomer karty:"«nomer karty«endl;
}
char *patient::getfamilya() { return familya; }
char *patient::getimiya() { return imiya; }
char *patient::getotchestvo() { return otchestvo; }
char *patient::getdiagnoz() { return diagnoz; }
char *patient::getadres() { return adres; }
int patient::getnomer karty() { return nomer karty; }
void spispatient(patient spis[],int n)
{

for(int i=0;i<n;i++)

spis[i].show();
}
void spisdiagnoz(patient spis[],int n)
{
int i,k;
char specifieddiagnoz[20];

cout«"Input specifieddiagnoz:"; cin»specifieddiagnoz;
for(i=0;i<n;i++)
if ((strcmp(spis[i].getdiagnoz(),specifieddiagnoz)==0))
spis[i].show();
}


int main(int argc, char** argv) {
patient *spis;
int n;
cout«"input a number of patient:"; cin»n;
spis=new patient [n];
for (int i=0;i<n;i++)
{
cout«"=========="«endl;
spis[i].show();
}
spisaddress(spis,n);
delete [] spis;
cout«"press sny key!";
while(!kbhit());
return 0;
}

 


Поделиться с друзьями:

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

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.025 с.