![]() Ласло Краус |
Објектно програмирање 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.