![]() Ласло Краус |
Објектно програмирање - колоквијуми Други колоквијум 25. 1. 2000 |
---|
=
);
>>
) и
<<
).
// 1999_k2.h - Definicije klasa za geometrijske figure.
#include <iostream.h>
class Figura {
virtual void citaj (istream &) = 0;
virtual void pisi (ostream &) const =0;
public:
virtual ~Figura () {}
virtual Figura *kopija () const = 0;
virtual double O () const = 0;
static void sort (Figura **, int);
friend istream & operator>> (istream &dd, Figura &ff)
{ ff.citaj (dd); return dd; }
friend ostream & operator<< (ostream &dd, const Figura &ff)
{ ff.pisi (dd); return dd; }
};
class Kvadr: public Figura {
double a;
void citaj (istream &dd) { dd >> a; }
void pisi (ostream &dd) const { dd << "Kv[" << a << ']'; }
public:
Kvadr (double aa=1) { a = 1; }
Figura *kopija () const { return new Kvadr (*this); }
double O () const { return 4 * a; }
};
class MUgao: public Figura {
double *str; int n;
void kopiraj (const MUgao &);
void brisi () { delete [] str; str = 0; }
void citaj (istream &);
void pisi (ostream &) const;
public:
MUgao () { str = 0; }
MUgao (const MUgao &mu) { kopiraj (mu); }
~MUgao () { brisi (); }
MUgao & operator= (const MUgao &mu) {
if (this != &mu) { brisi (); kopiraj (mu); }
return *this;
}
Figura *kopija () const { return new MUgao (*this); }
double O () const;
};
// 1999_k2.cpp - Definicije metoda uz klase za geometrijske figure.
#include "1999_k2.h"
void Figura::sort (Figura **niz, int n) {
for (int i=0; i<n-1; i++)
for (int j=i+1; j<n; j++)
if (niz[i]->O() > niz[j]->O())
{ Figura *p = niz[i]; niz[i] = niz[j]; niz[j] = p; }
}
void MUgao::kopiraj (const MUgao &mu) {
if ((str = new double [n=mu.n]) == 0) throw 1;
for (int i=0; i<n; i++) str[i] = mu.str[i];
}
void MUgao::citaj (istream &dd) {
brisi (); cin >> n;
if ((str = new double [n]) == 0) throw 1;
for (int i=0; i<n; dd>>str[i++]);
}
void MUgao::pisi (ostream &dd) const {
dd << "MU[";
for (int i=0; i<n; i++)
{ dd << str[i]; if (i<n-1) cout << ','; }
dd << ']';
}
double MUgao::O () const {
if (str == 0) throw 2;
double OO = 0; for (int i=0; i<n; OO+=str[i++]);
return OO;
}
// 1999_k2t.cpp - Ispitivanje klasa za geometrijske figure.
#include "1999_k2.h"
#include <iostream.h>
int main () {
while (1) {
cout << "\nDuzina niza? "; int n; cin >> n;
if (n < 0) break;
Figura **fig = 0;
try {
if ((fig = new Figura * [n]) == 0) throw 1;
for (int i=0; i<n; i++) {
cout << "Figura broj " << i << "? ";
char ff; cin >> ff;
switch (ff) {
case 'k': case 'K': fig[i] = new Kvadr; break;
case 'm': case 'M': fig[i] = new MUgao; break;
default : fig[i] = 0;
}
if (fig[i] == 0) throw 3;
cin >> *fig[i];
}
Figura::sort (fig, n);
cout << endl;
for (i=0; i<n; cout << *fig[i++] << endl);
} catch (int g) {
cout << "*** Greska " << g << "***\a\n";
}
if (fig) {
for (int i=0; i<n; delete fig[i++]); delete [] fig;
}
}
return 0;
}
(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.