Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Задача 1.
- Направи класа за Книга за која ќе се чуваат следните податоци: име (динамички алоцирана променлива), код, цена, курс на евро кое може да се менува во текот на програмата i ke bide isto za site knigi i pocetna vrednost 61.5 година на издавање и автор (динамички алоцирана променлива). За секоја книга преоптовари ги следните оператори:
- - <<
- - >>
- - < sporeduva dve knigi spored godinata na izdavanje
- - == споредување на две книги според кодот
- - += додади години на годината на издавање
- - =
- - cenaVoEvra()
- Направи класа Библиотека во која ќе се чува името на библиотеката, капацитет на книги во библиотеката, динамички алоцирана низа од Книги и бројот на книги во библиотеката. За класата преоптовари ги следните оператори:
- - += додавање книга во библиотеката
- - -= бришење книга од библиотеката
- - postariKnigi(int godina) печати ги сите книги постари од таа година
- - kolkuKnigiOdAvtor(char *nekojAvtor) кој е авторот
- - pecatiSiteKnigi()
- - vkupnaCenaVoEvra()
- - daliSiteKnigiPosle1950()
- - prosecnaCenaNaKniga()
- *** БОНУС
- Доколку проба да се додаде книга што веќе ја имаме во библиотеката да се фрли исклучок од класата SameBookException. Доколку го надминуваме капацитетот на книги да се фрли исклучок од класата MaxCapacity.
- #include<iostream>
- using namespace std;
- class MaxCapacity{
- private:
- char error[25];
- public:
- MaxCapacity(){}
- MaxCapacity(char error[]){
- strcpy(this->error,error);
- }
- void print(){
- cout<<error<<endl;
- }
- };
- class SameBookException{
- private:
- char error[25];
- public:
- SameBookException(){}
- SameBookException(char error[]){
- strcpy(this->error,error);
- }
- void print(){
- cout<<error<<endl;
- }
- };
- class Kniga{
- private:
- char *ime;
- int kod;
- static float evro;
- float cena;
- int godina;
- char *avtor;
- public:
- Kniga(){
- // delete []avtor;
- // delete []ime;
- this->ime=new char[0];
- this->avtor=new char[0];
- }
- // constructor so 5 promenlivi
- Kniga(char *ime,int kod,float cena,int godina,char *avtor){
- // delete []ime
- this->ime=new char[strlen(ime)+1];
- strcpy(this->ime,ime);
- this->kod=kod;
- this->cena=cena;
- this->godina=godina;
- this->avtor=new char[strlen(avtor)+1];
- strcpy(this->avtor,avtor);
- }
- // constructor so 3 promenlivi
- Kniga(char *ime,int kod,float cena){
- // delete []ime
- this->ime=new char[strlen(ime)+1];
- strcpy(this->ime,ime);
- this->kod=kod;
- this->cena=cena;
- }
- // copy constructor
- Kniga(const Kniga &novaKniga){
- this->ime=new char[strlen(novaKniga.ime)+1];
- strcpy(this->ime,novaKniga.ime);
- this->kod=novaKniga.kod;
- this->cena=novaKniga.cena;
- this->godina=novaKniga.godina;
- this->avtor=new char[strlen(novaKniga.avtor)+1];
- strcpy(this->avtor,novaKniga.avtor);
- }
- Kniga &operator=(Kniga &novaKniga){
- // proverka dali se isti objektite pred da kopirame (proverka spored adresa)
- if(this != &novaKniga){
- this->ime=new char[strlen(novaKniga.ime)+1];
- strcpy(this->ime,novaKniga.ime);
- this->kod=novaKniga.kod;
- this->cena=novaKniga.cena;
- this->godina=novaKniga.godina;
- this->avtor=new char[strlen(novaKniga.avtor)+1];
- strcpy(this->avtor,novaKniga.avtor);
- }
- return *this;
- }
- // operator << (za printanje)
- friend ostream &operator<<(ostream &output, Kniga &objekt){
- output<<"Kniga: "<<objekt.ime<<" "<<objekt.kod<<" "<<objekt.cena<<" "<<objekt.godina<<" "<<objekt.avtor<<endl;
- return output;
- }
- // operator >> (za input)
- friend istream &operator>>(istream &input, Kniga &objekt){
- input>>objekt.ime;
- input>>objekt.kod;
- input>>objekt.cena;
- input>>objekt.godina;
- input>>objekt.avtor;
- return input;
- }
- bool operator<(Kniga &drugaKniga){
- if(this->godina<drugaKniga.godina){
- return true;
- }else{
- return false;
- }
- //return this->godina<drugaKniga.godina;
- }
- bool operator==(Kniga &drugaKniga){
- return this->kod==drugaKniga.kod;
- }
- void setGodina(int godina){
- this->godina=godina;
- }
- void setAvtor(char *niza){
- avtor=new char[strlen(niza)+1];
- strcpy(avtor,niza);
- }
- float cenaVoEvra(){
- return cena/Kniga::evro;
- }
- void print(){
- cout<<"Kniga: "<<ime<<" "<<kod<<" "<<cena<<" "<<godina<<" "<<avtor<<endl;
- }
- static void setEvro(float novKurs){
- evro=novKurs;
- }
- ~Kniga(){
- delete []ime;
- delete []avtor;
- }
- };
- float Kniga::evro=61.5;
- class Biblioteka{
- private:
- char ime[25];
- int kapacitet;
- Kniga *knigi;
- int brojKnigi;
- public:
- Biblioteka(){
- knigi=new Kniga[0];
- brojKnigi=0;
- }
- Biblioteka(char ime[],int kapacitet){
- knigi=new Kniga[0];
- brojKnigi=0;
- strcpy(this->ime,ime);
- this->kapacitet=kapacitet;
- }
- Biblioteka &operator+=(Kniga &novaKniga){
- if(brojKnigi==kapacitet){
- throw MaxCapacity("Kapcitetot e tolku");
- }
- // testing exception
- for(int i=0;i<brojKnigi;i++){
- if(knigi[i]==novaKniga){
- throw SameBookException("Knigata veke ja imame");
- }
- }
- Kniga *tempNiza = new Kniga[brojKnigi];
- for(int i=0;i<brojKnigi;i++){
- // operator =
- tempNiza[i]=knigi[i];
- }
- knigi=new Kniga[brojKnigi+1];
- for(int i=0;i<brojKnigi;i++){
- knigi[i]=tempNiza[i];
- }
- knigi[brojKnigi]=novaKniga;
- brojKnigi++;
- delete []tempNiza;
- return *this;
- }
- void printKnigi(){
- for(int i=0;i<brojKnigi;i++){
- cout<<knigi[i];
- }
- }
- Biblioteka &operator-=(Kniga &novaKniga){
- int flag=0;
- for(int i=0;i<brojKnigi;i++){
- if(knigi[i]==novaKniga){
- flag=1;
- break;
- }
- }
- // znaeme deka go imame objektot vo nizata
- if(flag==1){
- int brojac=0;
- Kniga *tempNiza = new Kniga[brojKnigi];
- for(int i=0;i<brojKnigi;i++){
- if(knigi[i]==novaKniga){
- // go skokame toj shto e ist
- }else{
- tempNiza[brojac]=knigi[i];
- brojac++;
- }
- }
- brojKnigi--;
- knigi=new Kniga[brojKnigi];
- for(int i=0;i<brojKnigi;i++){
- knigi[i]=tempNiza[i];
- }
- delete []tempNiza;
- }
- return *this;
- }
- void print(){
- cout<<ime<<" "<<kapacitet<<endl;
- }
- ~Biblioteka(){
- delete []knigi;
- }
- };
- int main(){
- cout<<"Testing parameter constructor"<<endl;
- Kniga lotr("The lord of the rings", 111222, 1000, 1955, "R.R. Tolkien");
- lotr.print();
- Kniga hp("Harry Potter", 222333, 1500);
- hp.setGodina(1991);
- hp.setAvtor("J.K. Rowling");
- hp.print();
- cout<<"Testing copy constructor"<<endl;
- Kniga hp2(hp);
- hp2.print();
- cout<<"Testing operator="<<endl;
- Kniga hp3;
- hp3=hp;
- cout<<"Testing operator <<"<<endl;
- cout<<hp3;
- cout<<"Testing operator >>"<<endl;
- Kniga got("GoT",333444,1750,1993,"R.R.Martin");
- //cin>>got;
- cout<<got;
- cout<<"Testing operator <"<<endl;
- if(hp<got){
- cout<<"HP<GOT"<<endl;
- }else{
- cout<<"HP>GOT"<<endl;
- }
- cout<<"Testing operator =="<<endl;
- if(hp==got){
- cout<<"HP==GOT"<<endl;
- }else{
- cout<<"HP!=GOT"<<endl;
- }
- cout<<"Testing static"<<endl;
- cout<<hp.cenaVoEvra()<<endl;
- Kniga::setEvro(61.7);
- cout<<hp.cenaVoEvra()<<endl;
- Biblioteka bm("Brakja Miladinovci", 3);
- cout<<"Testirame += operator"<<endl;
- try{
- bm+=hp;
- bm+=got;
- bm+=lotr;
- bm+=hp;
- }catch(SameBookException &objekt){
- objekt.print();
- }catch(MaxCapacity &objekt){
- objekt.print();
- }
- bm.printKnigi();
- cout<<"Testirame -= operator"<<endl;
- bm-=hp;
- bm.printKnigi();
- return 0;
- }
Add Comment
Please, Sign In to add comment