лабораторной работе №8 Абстрактные классы
.docxБелорусский Государственный Университет Информатики и Радиоэлектроники
Кафедра экономической информатики
Отчет
по лабораторной работе №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;
}