![]() Ласло Краус |
Објектно програмирање 1 - колоквијуми Први колоквијум 24. 4. 2010. |
|---|
Књига има наслов, име аутора, број страница и годину издавања. Написати на језику C++ класу за књиге. Предвидети:
knjiga1=knjiga2);
it<<knjiga) у облику "аутор:наслов,бр_стр,година".
Библиотека има име и садржи низ показивача на књиге одређеног капацитета. Написати на језику C++ класу за библиотеке. Предвидети:
bibl+=knjiga; вредност функције је индикатор успеха; грешка је ако нема слободног места);
0 ако је индекс изван опсега или ако је дато место празно);
0 ако је индекс изван осега или ако је дато место празно);
it<<bibli; у првом реду се пише име библиотеке, а иза тога садржане књиге – једна књига по реду).
Написати на језику C++ програм који направи библиотеку капацитета 4, додаје 3 књиге, узме и испише књигу са позиције 1, додаје 4 књиге, узме и испише књигу са позиције 0 и испише библиотеку на главном излазу. Користити константне параметре (не треба ништа учитавати с главног улаза).
ispitx (x је број радне станице за којим се ради). Лозинка на свакој радној станици је student.I: (Nastava on \\Xs200-2).
// knjiga.h
#include <iostream>
#include <cstring>
using namespace std;
class Knjiga {
char *nasl, *aut;
int brStr, god;
void kopiraj( const Knjiga& k);
void brisi() { delete [] nasl; delete [] aut; }
public:
Knjiga( const char* n, const char* a, int s, int g);
Knjiga( const Knjiga& k) {kopiraj(k);}
~Knjiga() { brisi(); }
Knjiga& operator=( const Knjiga& k) {
if (this != &k) { brisi(); kopiraj( k); }
return *this;
}
const char* naslov() const { return nasl; }
const char* autor() const {return aut;}
int brStrana() const { return brStr; }
int godina() const { return god; }
friend ostream& operator<<( ostream& it, const Knjiga& k) {
return it << k.aut << ':' << k.nasl << ',' << k.brStr << ',' << k.god;
}
};
// knjiga.cpp
#include "knjiga.h"
Knjiga::Knjiga( const char* n, const char* a, int s, int g) {
nasl = new char [strlen(n)+1]; strcpy( nasl, n);
aut = new char [strlen(a)+1]; strcpy( aut, a);
brStr = s; god = g;
}
void Knjiga::kopiraj( const Knjiga& k) {
nasl = new char [strlen(k.nasl)+1]; strcpy( nasl, k.nasl);
aut = new char [strlen(k.aut)+1]; strcpy( aut, k.aut);
brStr = k.brStr; god = k.god;
}
// bibli.h
#include "knjiga.h"
#include <iostream>
#include <cstring>
using namespace std;
class Bibli {
char* ime; Knjiga** knjige; int kap,br;
Bibli( const Bibli&) {}
void operator=( const Bibli&) {}
public:
Bibli( const char* i, int k=100);
~Bibli();
const char* uzmiIme() const { return ime; }
bool operator+=( const Knjiga& k);
Knjiga* uzmi(int i) {
if (i<0 || i>=kap) return 0;
Knjiga* k = knjige[i]; knjige[i] = 0;
return k;
}
const Knjiga* operator[]( int i) const{
if (i<0 || i>=kap) return 0;
return knjige[i];
}
friend ostream& operator<< ( ostream& it, const Bibli& b);
};
// bibli.cpp
#include "bibli.h"
Bibli::Bibli( const char* i, int k) {
ime = new char [strlen(i)+1]; strcpy( ime, i);
knjige = new Knjiga* [kap = k];
for (int i=0; i<kap; knjige[i++]=0);
}
Bibli::~Bibli() {
delete [] ime;
for (int i=0; i<kap; delete knjige[i++]);
delete [] knjige;
}
bool Bibli::operator+=( const Knjiga& k){
int i=0; while(i<kap && knjige[i]) i++;
if (i == kap) return false;
knjige[i] = new Knjiga( k);
return true;
}
ostream& operator<<( ostream& it, const Bibli& b) {
it << b.ime << endl;
for (int i=0; i<b.kap; i++)
if (b.knjige[i]) it << *b.knjige[i] << endl;
return it;
}
// program.cpp
#include "bibli.h"
#include <iostream>
using namespace std;
int main() {
Bibli bibli( "Biblioteka", 4);
bibli += Knjiga( "Naslov1", "Autor1", 100, 2001);
bibli += Knjiga( "Naslov2", "Autor2", 200, 2002);
bibli += Knjiga( "Naslov3", "Autor3", 300, 2003);
cout << *bibli.uzmi( 1) << endl;
bibli += Knjiga( "Naslov4", "Autor4", 400, 2004);
bibli += Knjiga( "Naslov5", "Autor5", 500, 2005);
bibli += Knjiga( "Naslov6", "Autor6", 600, 2006);
bibli += Knjiga( "Naslov7", "Autor7", 700, 2007);
cout << *bibli.uzmi(0) << endl << endl;
cout << bibli; return 0;
}
Autor2:Naslov2,200,2002
Autor1:Naslov1,100,2001
Biblioteka
Autor4:Naslov4,400,2004
Autor3:Naslov3,300,2003
Autor5:Naslov5,500,2005
(садржај)
Copyright © 2010, Laslo Kraus
Последња ревизија: 4.10.2010.