Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Polomorfizam i nasledjivanje

[es] :: C/C++ programiranje :: Polomorfizam i nasledjivanje

[ Pregleda: 1097 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

gospodin.kojot

Član broj: 263879
Poruke: 34
*.dynamic.isp.telekom.rs.



+1 Profil

icon Polomorfizam i nasledjivanje14.12.2012. u 00:02 - pre 138 meseci
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?
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2790 Profil

icon Re: Polomorfizam i nasledjivanje15.12.2012. u 10:52 - pre 138 meseci
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];
// ...
 

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Polomorfizam i nasledjivanje

[ Pregleda: 1097 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.