Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабораторной работе №8 Абстрактные классы

.docx
Скачиваний:
11
Добавлен:
01.04.2014
Размер:
91.69 Кб
Скачать

Белорусский Государственный Университет Информатики и Радиоэлектроники

Кафедра экономической информатики

Отчет

по лабораторной работе №8

Тема: «Абстрактные классы»

Выполнил студент группы

Минск, 2011

Код программы:

#include <stdafx.h>

#include <iostream>

using namespace std;

template <class T>

class list

{

protected:

int size;

T *top;

T *start;

public:

list(int);

virtual~list();

void virtual push(T)=0;

T virtual pop()=0;

int getSize();

};

template <class T>

list<T>::list(int k):size(k)

{

top=start=new T[k];

cout<<"list()"<<endl;

}

template <class T>

list<T>::~list()

{

delete []top;

cout<<"~list()"<<endl;

}

template <class T>

int list<T>::getSize()

{return size;}

template <class T>

class Stack:public list<T>

{

int t;

public:

Stack(int);

~Stack();

void push(T);

T pop();

};

template <class T>

Stack<T>::Stack(int d):list<T>(d)

{cout<<"Stack()"<<endl;}

template <class T>

Stack<T>::~Stack()

{cout<<"~Stack"<<endl;}

template <class T>

void Stack<T>::push(T a)

{

if(t<0) t=0;

if(t<=size) *top++=a;

else return;

t++;

}

template <class T>

T Stack<T>::pop()

{

t--;

if(t>=0) return *--top;

else return NULL;

}

template <class T>

class Queue:public list<T>

{

int t;

public:

Queue(int);

~Queue();

void push(T);

T pop();

};

template <class T>

Queue<T>::Queue(int p):list<T>(p)

{cout<<"Queue()"<<endl;}

template <class T>

Queue<T>::~Queue()

{cout<<"~Queue()"<<endl;}

template <class T>

void Queue<T>::push(T b)

{

if(t<0) t=0;

if(t<=size) *top++=b;

else return;

t++;

}

template <class T>

T Queue<T>::pop()

{

t--;

if(t>=0) return *start++;

else return NULL;

}

int main()

{

int i=0;

Stack<int> X(5);

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

X.push(5-i);

for(i=0;i<X.getSize();i++)

cout<<X.pop()<<"/ ";

cout<<endl<<endl;

Stack<char> Y(5);

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

Y.push('i'-i);

for(i=0;i<Y.getSize();i++)

cout<<Y.pop()<<"/ ";

cout<<endl<<endl;

Queue<int> Z(7);

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

Z.push(i+1);

for(i=0;i<Z.getSize();i++)

cout<<Z.pop()<<"/ ";

cout<<endl<<endl;

Queue<char> O(7);

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

O.push('i'+i);

for(i=0;i<O.getSize();i++)

cout<<O.pop()<<"/ ";

cout<<endl<<endl;

return 0;

}

Код программы:

#include <stdafx.h>

#include <iostream>

#include <math.h>

using namespace std;

class T

{

protected:

double t;

public:

T(char *);

virtual~T();

void virtual print();

void virtual sum(int)=0;

};

T::T(char *y):t(0)

{cout<<"Konstruktor T ("<<y<<")\n"<<endl;}

T::~T()

{cout<<"Destruktor T\n"<<endl;}

void T::print()

{cout<<t<<endl;}

class A:public T

{

double a;

double d;

public:

A(char *,double,double);

~A();

void sum(int);

};

A::A(char *name,double a,double d):T(name)

{

cout<<"Konstruktor A\n"<<endl;

this->a=a;

this->d=d;

}

A::~A()

{cout<<"\nDestruktor A\n"<<endl;}

void A::sum(int n)

{

t=((2*a+(n-1)*d)*n)/2;

cout<<"Summa arefmeticheskoy progressii= ";

this->print();

}

class B:public T

{

double b;

double q;

public:

B(char *,double,double);

~B();

void sum(int);

};

B::B(char *name,double b,double q):T(name)

{

cout<<"Konstruktor B\n"<<endl;

this->b=b;

this->q=q;

}

B::~B()

{cout<<"Destruktor B\n"<<endl;}

void B::sum(int n)

{

if(q!=1)t=b*((1-pow(q,n))/(1-q));

else t=b*n;

cout<<"Summa geometricheskoy progressii= ";

this->print();

}

int main()

{

T *pr1,*pr2;

pr1=new A("Arifmeticheskay progressiya",9,3);

pr2=new B("Geometricheskay progressiya",1.6,2);

pr1->sum(5);

pr2->sum(3);

delete pr1;

delete pr2;

return 0;

}