[ gospodin.kojot @ 14.12.2012. 00:02 ] @
Imam sledeci zadatak:
Citat:
Na programskom jeziku C++ kreirati klasu Skladiste koja od privatnih atributa sadrži maksimalni kapacitet u kg (double), broj elemenata niza i niz pointera na objekte klase Element. Klasa sadrži i sledeće javne funkcije:
• konstruktor koji postavlja maksimalni kapacitet, broj elemenata niza i zauzima potreban prostor u memoriji
• destruktor
• funkciju za dodavanje jednog elementa u niz ako time ukupna količina materijala ne prevazilazi maksimalnu vrednost
• funkciju za određivanje ukupne količine materijala u skladištu
• funkciju koja štampa listu šifara svih materijala koji su uskladišteni (svaku šifru štampati po jednom)
• prijateljsku operatorsku funkciju << za štampanje liste elemenata u skladištu uredjenu u rastući niz po šifri materijala.

Kreirati klasu Element koja od zaštićenih atributa sadrži šifru (int), šifru materijala (int) i količinu (float), a od javnih funkcija:
• funkciju koja vraća šifru materijala,
• funkciju koja vraća količinu materijala
• čistu virtuelnu funkciju za štampanje podataka o elementu
• operatorsku funkciju za upoređivanje dva elementa (po šifri)

Kreirati klasu Paleta koja je javno izvedena iz klase Element,koja od privatnih atributa sadrži lot kod (niz karaktera) i tip („pck“ za paket, „silo“ za silos). Od javnih metoda sadrži:
• konstruktor koji postavlja sve atribute
• operator >> za unos podataka o paleti

U funkciji main napraviti skladište, napraviti nekoliko paketa i silosa i dodati ih skladištu. Zatim odrediti ukupnu količinu materijala u skladištu, odštampati listu šifara svih materijala koji se javljaju u skladištu i odštampati listu svih paketa i silosa.


evo ga i kod
Code:
header fajl
#include <iostream>
using namespace std;  

class element
{
protected:
    int sifra,sifmat;
    float kolicina;
public:
    element();
    int vratis();
    float vratik();
    virtual void stampaj()=0;
    element& operator>(element& k);
};

class paleta:public element
{
private:
    char lotkod[10];
    char tip[4];
public:
    paleta(char k[],char tip[]);
    istream& operator>>(istream& in);
};

class skladiste
{
private:
    double maxkg;
    int brniz;
    element* niz;
public:
    skladiste(double k,int n);
    ~skladiste();
    void dodaj();
    float odredi();
    void stampaj();
    friend ostream& operator<<(ostream& out,skladiste& k);
};


Code:
cpp

#include "skladiste.h"
#include <iostream>
using namespace std;

skladiste::skladiste(double k, int n)
{
    this->maxkg=k;
    this->brniz=n;
    this->niz=new element[this->brniz];
}
skladiste::~skladiste()
{
    delete[] niz;
}

void skladiste::dodaj()
{
    float ukkol=0;
    for(int i=0;i<this->brniz;i++)
        ukkol=niz[i].kolicina+ukkol;
    if(ukkol>=maxkg)
        cout<<"Nema dovoljno mesta";
    else 
        cin>>niz->sifra>>niz->sifmat>>niz->kolicina;
}
float skladiste::odredi()
{
    float ukkol=0;
    for(int i=0;i<this->brniz;i++)
        ukkol=niz[i].kolicina+ukkol;
    return ukkol;
}
void skladiste::stampaj()
{
    cout<<niz->sifra;
}
ostream& operator <<(ostream& out,skladiste& k)
{
    int min;
    for(int i=0;i<k.brniz-1;i++)
    {
        for(int j=i+1;j<k.brniz;j++)
        {
             min=k.niz[i].sifmat;
            if(min>k.niz[j].sifmat)
                min=k.niz[j].sifmat;
        }
        out<<min;
    }
    return out;
}
element::element()
{
}

float element::vratik()
{
    return(this->kolicina);
}
int element::vratis()
{
    return(this->sifmat);
}
element& element::operator >(element &k)
{
    if(this->sifmat>k.sifmat)
        return k;
    else return *this;
}
paleta::paleta(char k[], char tip[])
{
    strcpy(this->lotkod,k);
    strcpy(this->tip,tip);
}
istream& paleta::operator >>(istream &in)
{
    in>>this->lotkod;
    in>>this->tip;
    return in;
}


Izbacuje mi gresku da ne mogu da pristupim protected delu klase element iako sam napravio pointer na tu klasu. Kako da resim da mi ovaj kod radi?
[ Nedeljko @ 15.12.2012. 10:52 ] @
Koliko ja vidim, javlja grešku u poslednjoj liniji konstruktora klase skladište da ne može da instancira primerak apstraktne klase element. Ovo ne može:

Code (cpp):

class element
{
// ...
    virtual void stampaj()=0;
// ...
};
// ...
    this->niz=new element[this->brniz];
// ...