Параметрический полиморфизм. Параметры шаблона — КиберПедия 

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

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Параметрический полиморфизм. Параметры шаблона

2018-01-30 187
Параметрический полиморфизм. Параметры шаблона 0.00 из 5.00 0 оценок
Заказать работу

Параметрический полиморфизм позволяет применить один и тот же алго-ритм к разным типам данных. При этом тип является параметром тела алгоритма.Механизм шаблонов, реализующий параметрический полиморфизм, позволяетлегче разрабатывать стандартные библиотеки.Шаблон представляет собой предварительное описание функции или типа,конкретное представление которых зависит от параметров шаблона. Так, еслинеобходимо написать функции нахождения суммы элементов числовых массивовразных типов (например, int, float или double), то вместо трех различныхфункций можно написать один шаблон.

Параметры шаблона

Для описания шаблонов используется ключевое слово template, вслед за которым указываются аргументы (формальные параметры шаблона), заключен-ные в угловые скобки. Формальные параметры шаблона перечисляются через

запятую, и могут быть как именами объектов, так и параметрическими именами типов (встроенных или пользовательских). Параметр-тип описывается с помощью служебного слова class или служебного слова typename.

В соответствии со Стандартом ISO 1998 C++ метром шаблона может быть:

− параметрическое имя типа

− параметр-шаблон

− параметр одного из следующих типов:

􀀹 интегральный

􀀹 перечислимый,

􀀹 указатель на объект любого типа (встроенного или пользователь-ского) или на функцию

􀀹 ссылка на объект любого типа (встроенного или пользователь-ского) или на функцию

􀀹 указатель на член класса, в частности, указатель на метод класса

− знаковые и беззнаковые целые типы,

bool, char, wchar_t

Примечание. Перечислимые типы не относятся к интегральным, но их значения

приводятся к ним в результате целочисленного повышения.

При использовании типа в качестве параметра перед параметром, являю-щимся параметрическим именем типа, необходимо использовать одно из клю-чевых слов: либо class,либо typename.

Примечание. Не все компиляторы обрабатывают вложенные шаблоны (например,Microsoft* VisualC++ 6*: VisualStudio 98*). Тем не менее, шаблонный класс может использоваться в качестве значения параметра по умолчанию. Далее будет рассмотреншаблонный класс со следующим прототипом:

template < class T, class A=allocator <T>> сlass vector

{...};

В разделе 14.1.7 Стандарта явно сказано, что нетиповый параметр не может

иметь тип void, пользовательский тип, или плавающий тип, например:

// template < double d> class X{... }; // ошибка

template < double * d> class X{... }; // OK

63.Разработать класс Student (Фамилия, Имя, Отчество, Дата рождения, Адрес, Телефон, Факультет, Курс). Включить в класс методы set (…), get (…), show (…). Определить другие методы. Создать массив объектов. Вывести список студентов, родившихся после заданного года.

#include <iostream>

#include <conio.h>

#include <string.h>

using namespace std;

Struct date

{char daymon[6];

int year; };

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

class Student{

char name[30];

date t;

char adr[30], fac[20],phone[20];

int kurs;

public:

Student();

char *getfac();

char *getphone();

int getyear();

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;

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

}

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;

cout<<"phone:"<<phone<<endl;

}

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

char *Student::getphone() { return phone; }

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

int Student::getyear() { return t.year; }

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 spisfachage(Student spis[],int n)

{int i,k;

char fac[20];

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

cout<<"Input year:"; cin>>k;

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

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

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) {

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

spisfachage(spis,n);

delete [] spis;

cout<<"press any key!";

while(!kbhit());

return 0;

}

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

#include <iostream>

#include <conio.h>

#include <string.h>

using namespace std;

class Book {

char Autor[40];

char Title[40];

char Publish[40];

int Year;

int Sheet_num;

public:

Book (const char *a,const char *b,const char *c, int i, int n) {

strcpy(Autor, a);

strcpy(Title, b);

strcpy(Publish, c);

Year = i;

Sheet_num = n;

}

char *get_aut() {return Autor;}

char *get_tit() {return Title;}

char *get_pub() {return Publish;}

int get_year() {return Year;}

int get_num() {return Sheet_num;}

void set_aut(char *aut) {strcpy(Autor, aut);}

void set_tit(char *tit) {strcpy(Title, tit);}

void set_pub(char *pub) {strcpy(Publish, pub);}

void set_year(int y) {Year = y;}

void set_num(int num) {Sheet_num = num;}

void show() {

cout << "Author: " << Autor<<'\t';

cout << "Book title: " << Title <<'\t';

cout << "Publishing house: " << '\"'<< Publish <<'\"'<< '\t';

cout << "The year of publishing: " << Year <<'\t';

cout << "Number of pages: " << Sheet_num<<"\n\n";

}

};

void SeekOnAutor(const char *str, Book *ob) {

cout << "List of author's books " << str << ": ";

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

if(!strcmp((ob[i].get_aut()), str)) ob[i].show();

}

cout << '\n';

}

void SeekOnPublish(const char *str, Book *ob) {

cout << "List of books of the publishing house " << str << ": ";

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

if(!strcmp((ob[i].get_pub()), str)) ob[i].show();

}

cout << '\n';

}

void SeekOnYear(int h, Book *ob) {

cout << "List of books after the year of publication " << h << ": ";

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

if(ob[i].get_year() >= h) ob[i].show();

}

cout << '\n';

}

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

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

setlocale (LC_ALL, "Russian");

Book ob[] = {

Book("Vern","20 000 Leagues under the sea","Extremo",1995,125),

Book("Dostoevskiy", "Crime and Punishment", "Extremo", 2000, 350),

Book("Dostoevskiy", "White Nights", "Piter", 1998, 200),

Book("Shekspir", "Hamlet", "Extremo", 1999, 100),

Book("Shekspir", "King Lear", "Piter", 1996, 150),

Book("Vern", "Around the world in 80 Days", "Piter", 1997, 150)

};

ob[1].show();

cout << ob[2].get_aut()<< '\n';

char choice, str[40];

int h;

for (;;) {

do {

cout<< "Select the menu item:\n"

<< " 1. List of books by author\n"

<< " 2. List of books by the name of the publishing house\n"

<< " 3. List of books after the year of publication\n"

<< "Select the help option (q to exit): ";

cin>> choice;

} while (choice<'1' || choice>'3'&& choice!='q');

if (choice=='q') break;

cout<<"\n\n";

switch(choice) {

case '1':

cout << "Enter the name of the author: ";

cin >> str;

SeekOnAutor(str, ob);

break;

case '2':

cout << "Enter the name of the publishing house: ";

cin >> str;

SeekOnPublish(str, ob);

break;

case '3':

cout << "Enter starting year: ";

cin >> h;

SeekOnYear(h, ob);

break;

}

cout<<"\n";

}

return 0;

}

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

#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;

}

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

#include <iostream>

#include <conio.h>

#include <string.h>

using namespace std;

Struct date

{char daymon[6];

int year; };

Class product

{

char product_name [30];

double price;

date t;

char Manufacturer[30];

int Quantity;

public:

product();

char *getproduct_name();

char *getManufacturer();

double getprice();

int getyear();

int getdata();

int getQuantity();

void show();

};

Product::product()

{

cout <<"input product_name:";cin>>product_name;

cout <<"input Manufacturer:";cin>>Manufacturer;

cout<<"Input date_of_manufacture";

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

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

cout <<"input price:";cin>>price;

cout <<"input Quantity:";cin>>Quantity;

}

Void product::show()

{

cout<<"product_name:"<<product_name<<endl;

cout<<"Manufacturer:"<<Manufacturer<<endl;

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

cout<<"price:"<<price<<endl;

cout<<"Quantity:"<<Quantity<<endl;

}

char *product::getproduct_name() {return product_name;}

char *product::getManufacturer() { return Manufacturer; }

double product::getprice() { return price; }

int product::getyear() { return t.year; }

int product::getQuantity() { return Quantity; }

void spisproduct(product spis[],int n)

{

// double;

//cout<<"input product:"; cin>>product;

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

//if(strcmp(spis[i].getproduct_name(),product)==0)

spis[i].show();

}

void spisproduct_price(product spis [], int n)

{

int i,k;

double price;

//int year;

//cout<<"input product:"; cin>>product;

cout<<"input serchin price:"; cin>>price;

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

if (spis[i].getprice()<price)

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) {

product *spis;

int n;

cout<<"input a number of product:"; cin>>n;

spis=new product [n];

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

{

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

spis[i].show();

}

spisproduct_price(spis,n);

delete [] spis;

cout<<"press sny key!";

while(!kbhit());

return 0;

}

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

#include <iostream>

#include <conio.h>

#include <string.h>

using namespace std;

class patient{

char familyname[30];

char firstname[30];

char patronymic[30];

int cardnumber;

char address[20],diagnosis[20];

public:

patient();

char *getfamilyname();

char *getfirstname();

char *getpatronymic();

char *getdiagnosis();

char *getaddress();

int getcardnumber();

void show();

};

Patient::patient()

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

cout<<"Input firstname";cin>>firstname;

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

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

cout<<"Input address";cin>>address;

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

}

Void patient::show()

{

cout<<"familyname:"<<familyname<<endl;

cout<<"firstname:"<<firstname<<endl;

cout<<"patronymic:"<<patronymic<<endl;

cout<<"diagnosis:"<<diagnosis<<endl;

cout<<"address:"<<address<<endl;

cout<<"cardnumber:"<<cardnumber<<endl;

}

char *patient::getfamilyname() { return familyname; }

char *patient::getfirstname() { return firstname; }

char *patient::getpatronymic() { return patronymic; }

char *patient::getdiagnosis() { return diagnosis; }

char *patient::getaddress() { return address; }

int patient::getcardnumber() { return cardnumber; }

void spispatient(patient spis[],int n)

{

//char specified address[20];

//cout<<"Input specified address:"; cin>>specified address;

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

//if(strcmp(spis[i].getspecified address(),specified address)==0)spis[i].show();

spis[i].show();

}

void spisaddress(patient spis[],int n)

{

int i,k;

char specifiedaddress[20];

//cout<<"Input patient:"; cin>>patient;

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

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

if ((strcmp(spis[i].getaddress(),specifiedaddress)==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) {

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;

}

 

 


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

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

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

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



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

0.202 с.