русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Зберігання типів користувача


Дата додавання: 2014-04-22; переглядів: 913.


Досі нам доводилося зберігати за допомогою шаблонних класів тільки базові типи даних. Тепер спробуємо виконати ті самі дії для типів користувача. Раніше ми створювали тип employce – працівників.

Далі приведена програма створює зв’язний список для збереження даних цього типу

//звязний список з використанням шаблону

//тип користувача

#include<iostream>

#include<conio.h>

using namespace std;

const int LEN=80;

//////////

class employce

{private:

char name[LEN];

unsigned long number;

public:

friend istream& operator>>(istream& s,employce& e);

friend ostream& operator<<(ostream& s,employce& e);

};

////////////

istream& operator>>(istream& s,employce& e)

{cout<<"\n PIP: ";cin>>e.name;

cout<<" Nomer: ";cin>>e.number;

return s;

}

 

ostream& operator<<(ostream& s,employce& e)

{cout<<"\n Name: "<<e.name;

cout<<"\n Number: "<<e.number;

return s;

}

///////////////

template<class TYPE>

Struct link

{

TYPE data;

link* next;

};

//////////////

template<class TYPE>

Class linklist

{

private:

link<TYPE>* first;

public:

Linklist()

{first=NULL;}

void additem(TYPE d);

void display();

};

/////////////

template<class TYPE>

void linklist<TYPE>::additem(TYPE d)

{link<TYPE>* newlink=new link<TYPE>;

newlink->data=d;

newlink->next=first;

first=newlink;

}

///////////

template<class TYPE>

void linklist<TYPE>::display()

{link<TYPE>* current=first;

while(current!=NULL)

{cout<<endl<<current->data;

current=current->next;

}

}

///////////

int main()

{ linklist<employce>lemp;

employce emptemp;

char ans;

do

{cin>>emptemp;

lemp.additem(emptemp);

cout<<"\nContinue (y/n)? ";

cin>>ans;

}while(ans!='n');

lemp.display();

cout<<endl;

getch();

return 0;

}

 

Програма 14.6

 

В цій програмі ми перезавантажили оператори видобування і вставки:

>> <<

Дані, одержані в результаті видобування з потоку, збережемо у тимчасовому об’єкті emptemp, перш ніж додавати їх до зв’язного списку.

Звернемо увагу на те, що клас linklist не потрібно ніяк модифікувати для того, щоб він зберігав об’єкти типу користувача.

Щоб визначити,, змінні якого типу можуть зберігатися в шаблонному класі, потрібно зрозуміти, які операції виконуються в його методах. Якщо методи класу використовують операції << (вставки) i >> (видобування), то треба перевірити, чи визначені вони по відношенню до даних нашого типу. Можливо, їх потрібно перезавантажити.

Якщо у методах є операції, несумісні з якимсь типом, тоді значення цього типу не можна зберігати в даному класі.

 


<== попередня лекція | наступна лекція ==>
Створення класу зв’язних списків за допомогою шаблону | Підсумок


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн