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

pomoc, c++, apstraktne klase, visestruko nasledjivanje, pokazivaci

[es] :: C/C++ programiranje :: pomoc, c++, apstraktne klase, visestruko nasledjivanje, pokazivaci

[ Pregleda: 1763 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

smikilag
Stojanovski Milos

Član broj: 42675
Poruke: 13
79.101.51.*



Profil

icon pomoc, c++, apstraktne klase, visestruko nasledjivanje, pokazivaci26.04.2013. u 17:30 - pre 83 meseci
Pozdrav svima,
imam problem sa zadatkom koji ne znam koliko je za pocetnike, ali ja jesam pocetnik pa imam nekih nejasnoca i nemam rutinu, pa ovako. Ovde imam prilozen dropbox folder sa dva fajla,
1. potraznja zadatka,
2. c++ fajl
ali da ne bih nagomilavao pusticu kod

Pitanja:
1.zadatak trazi da tipovi budu definisani kao string, ja sam stavio char, kako definisem string, ili ga koristim kao i char. malo mi nejasno.
2.zadatak trazi da se uradi u tri fajla, znaci klasa treba da bude "*.h" heder, ali ako stavim tako ne prepoznaje mi biblioteke "E:\Documents\Desktop\Simpozijum\1.h iostream: No such file or directory. " sta uraditi?
3.imam problem sa apstraktnom klasom i virtuelnom funkciom iz 29 linije, koja se odnosi i na 66 liniju ili je to tako dobro?
4. da li je 62 linija dobra (float P1, float P2)
bice ovde jos neko pitanje samo ako bude bilo kandidata za pomoc


Code:

#include <iostream>
#include <cstdlib>

using namespace std;

class kSimpozijum
{
    private:
        //float pKotizacija;

    public:
        float pKotizacija;  //pKotizacija - visina kotizacije |float|, privatni atribut
        float tPrevoz;
        float tSmestaj;
        char pNaziv;  // pNaziv - naziv simpozijuma |string|. javni atribut
        char pMesto;  //pMesto - naziv mesta gde se simpozijum odrzava |string|, javni atribut
        
        kSimpozijum()  //Konstruktor - koji upisuje vrednosti koje korisnik unese u atribute.
        {
            cout<<"\nUnesi naziv Simpozijuma: "; cin>>pNaziv;
            cout<<"\nUnesi naziv grada gde se simpozijum odrzava: "; cin>>pMesto;
            cout<<"\nUnesi visinu kotizacije: "; cin>>pKotizacija;
        }
        void fIspis()  //funkcija koja ispisuje atribute na ekran(ne prima parametre, ne vraca rezultat)
        {
            cout<<"\nOvo je Simpozijum "<<pNaziv<<", a odrzava se u "<<pMesto<<"."<<endl;
        };
        float fDohvatiKot() {return pKotizacija;}  
        //- fDohvatiKot - funkcija koja vraca vrednost atributa pKotizacija (ne prima parametre, ne vraca rezultat)
        virtual float fUcesce( float  pKotizacija, float tPrevoz, float tSmestaj)    
        {return tPrevoz + tSmestaj;}
        // fUcesce - cista virtualna funkcija koja izracunava cenu ucesca na simpozijumu, sa troskovima smestaja 
        // i prevoza, pri cemu se vrednost za troskove smestaja i prevoza prima iz glavnog programa (prima 2 parametra i vraca rezultat)
        ~kSimpozijum(){}    //destruktor
};
class kUcesnik  //Kreira klasu kUcesnik 
{
    public:  //javni atributi
        char pIme;  //- pIme - ime i prezime ucesnika u simpozijumu |string|,
        char pUstanova;  //- pUstanova - naziv ustanove u kojoj je ucesnik zaposlen |string|
        
        //javne metode
        kUcesnik()  //- Konstruktor - koji upisuje vrednosti koje korisnik unese u atribute
        {
            cout<<"\nUnesi Ime i prezime ucesnika simpozijuma: "; cin>>pIme;
            cout<<"\nUnesi naziv ustanove u kojoj je ucesnik zaposlen: "; cin>>pUstanova;
        }
        void fPisiUcesnika()  //- fPisiUcesnika - funkcija koja ispisuje vrednosti atributa na ekran
                                //(ne prima parametre, ne vraca rezultat)
        {
            cout<<"\nUcesnik simpozijuma "<<pIme<<", je iz ustanove"<<pUstanova<<".";
        };
        ~kUcesnik(){} // destruktor
};

class iStrucniRad:public kSimpozijum, public kUcesnik // Kreira klasu iStrucniRad koja nasledjuje klasu kSimpozijum i kUcesnik 
{
    public:
        char pNazRada;  //- pNazRada - naziv rada |string|
        int pBrAutora;  //- pBrAutora - broj autora knjige |int|
        int pPovez;     //- pPovez - tip poveza (1- tvrdi povez, 2- meki povez) |int|
        
        //Konstruktor - upisuje vrednosti koje korisnik unese u atribute i nadogradjuje konstruktore klasa kSimpozijum i kUcesnik
        iStrucniRad():kSimpozijum(), kUcesnik()
        {
            cout<<"\nUnesi naziv rada: "; cin>>pNazRada;
            cout<<"\nUnesi broj autora: "; cin>>pBrAutora;
            cout<<"\nUnesi tip poveza(1-tvrdi, 2-meki): "; cin>>pPovez;
        }
        void fIspis(float P1, float P2)
        //- fIspis - funkcija koja ispituje vrednosti atributa na ekran i poziva funkcije   
        // -  fPisiUcesnika klase kUcesnik
        // -  fIspis i fUcesce klase kSimpozijum
        // (prima 2 parametra, ne vraca rezultat)
        {
            kUcesnik::fPisiUcesnika();
            kSimpozijum::fIspis();
            kSimpozijum::fUcesce( pKotizacija,  tPrevoz, tSmestaj);
            
                cout<<"\nNaziv rada je "<<pNazRada<<", broj autora je "<<pBrAutora<<", a tip poveza je "<<pPovez<<"."<<endl;
        }
        virtual float fUcesce()
        // fUcesce - cista virtualna funkcija koja izracunava cenu ucesca na simpozijumu, sa troskovima smestaja 
        // i prevoza, pri cemu se vrednost za troskove smestaja i prevoza prima iz glavnog program
        {
            float cu=0;
            
            if (pBrAutora<3)
            {
                cu+=(pKotizacija+tPrevoz+tSmestaj)*pBrAutora;
                return cu;
            }
            else
            {
                cu+=(0.7*pKotizacija+tPrevoz+tSmestaj)*pBrAutora;
                return cu;    
            }            
        }
        ~iStrucniRad(){
        }
};



 
Odgovor na temu

Ozzy80
BGD,Srbija

Član broj: 277326
Poruke: 27
178.79.37.*



+1 Profil

icon Re: pomoc, c++, apstraktne klase, visestruko nasledjivanje, pokazivaci26.04.2013. u 18:47 - pre 83 meseci
Zaboravio sam c++ al mogu da ti odgovorim na prvo pitanje. String i char nije isto. Char ti je tip podataka, a string je niz znakova koji se zavrsava terminirajucom nulom tj '/0'. Nemozes da napises recimo string [100], jer to ne predstavlja da ti je niz stringova dugacak 100 bajtova, jer strign kao string nije tip podatka ( *jedino ako ga ti tako ne definises), dok mozes char[100] jer to vec predstavlja niz od 100 bajtova.
String ti izgleda ovako recimo

'Z', 'd', 'r', 'a', 'v', 'o','/0'

Nadam se da sam ti razjasnio malo. Ovo ostalo me mrzi da se opet podsecam sintakse, al ako ti niko ne odgovori ja cu do nedelje.

PS *Pod ovo ako ga ti ne definises sam mislio ako ne stavis makro zamenu da ti se recimo int zove string u tvom programu
 
Odgovor na temu

smikilag
Stojanovski Milos

Član broj: 42675
Poruke: 13
79.101.51.*



Profil

icon Re: pomoc, c++, apstraktne klase, visestruko nasledjivanje, pokazivaci26.04.2013. u 19:36 - pre 83 meseci
hvala ti i za ovo, post mi je bio aktivan i kod pocetnika, ali niko odgovorio nije, pa sam prebacio ovde, ali slabo niko ni da prokomentarise. sad me muci "meni" koji nije bas najjasnije definisan.
 
Odgovor na temu

Ozzy80
BGD,Srbija

Član broj: 277326
Poruke: 27
178.79.37.*



+1 Profil

icon Re: pomoc, c++, apstraktne klase, visestruko nasledjivanje, pokazivaci26.04.2013. u 21:37 - pre 83 meseci
Nerazumem bas najjasnije pitanje, kakav meni?
 
Odgovor na temu

smikilag
Stojanovski Milos

Član broj: 42675
Poruke: 13
79.101.51.*



Profil

icon Re: pomoc, c++, apstraktne klase, visestruko nasledjivanje, pokazivaci26.04.2013. u 23:00 - pre 83 meseci
e pa da bi razumeo moras da otvoris wor fajl iz dropboxa, tamo je zadatak sta sve treba uraditi, verujem da je jednostavno za one koji znaju, mini ide malo slabije.
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: pomoc, c++, apstraktne klase, visestruko nasledjivanje, pokazivaci26.04.2013. u 23:34 - pre 83 meseci
1. char pNaziv;

Ovo ovako ne moze posto je char velicine jedan bajt i to znaci da u njega mozes da smestis samo jedan karakter a ne i seriju karaktera. Najlakse ti je da koristis std::string koji ce ti lepo raditi sa cin pozivima za unos.

znaci, stavi #include <string> i umesto char koristi std::string.

2. Moras da dodas #include direktivu u svakom .h fajlu. Npr. ovu gresku ti javlja jer negde koristis cin i cout i oni se nalaze u iostream.h tako da moras da dodas #include <iostream> u svakom fajlu gde koristis cin i cout.

3. Ovo nije apstraktna klasa... Bolji termin za ovakvu klasu je bazna klasa. Apstraktne klase sadrze ciste virtuelne funkcije (ti ovde naglasavas da imas neke ciste virtualne funkcije ali ih, u stvari, nemas).
Oko apstraktnih klasa i cistih virtuelnih funkcija mozes da oGooglas malo.

Inace, ovde je problem sto si u basnoj klasi deklarisao fUcesce kao:

virtual float fUcesce( float pKotizacija, float tPrevoz, float tSmestaj)

a onda u izvedenoj

virtual float fUcesce()

Da bi polimorfizam ( pravi poziv virtuelne funkcije u zavisnosti od objekta ) radio, funkcija u obe klase (baznoj i izvedenoj) mora da ima identican potpis tako da bi u iStrucniRad trebao isto da imas:

virtual float fUcesce( float pKotizacija, float tPrevoz, float tSmestaj)


EOF
 
Odgovor na temu

smikilag
Stojanovski Milos

Član broj: 42675
Poruke: 13
79.101.51.*



Profil

icon Re: pomoc, c++, apstraktne klase, visestruko nasledjivanje, pokazivaci27.04.2013. u 23:09 - pre 83 meseci
hvala, na obrazlozenjima i pomoci.

dopuna...


dropbox simpozijum.cpp je izmenjeni kod, pa ako mozete da prokomentarisete virtuelne funkcije, to sto je u komentarima, ometa mi kod, kako da ga uklopim, kako definisati?


[Ovu poruku je menjao smikilag dana 28.04.2013. u 19:38 GMT+1]
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: pomoc, c++, apstraktne klase, visestruko nasledjivanje, pokazivaci29.04.2013. u 15:10 - pre 82 meseci
Ok, prvo, lepo si se snasao oko stringova, moja ideja je bila da se koristi std::string ali je i koriscenje char* Ok.

Nisam siguran kako zelis da funkcionise sistem ali ako u kSimpozijum uvedes virtuelnu funkciju:

virtual float fUcesce(float tPrevoz, float tSmestaj) = 0;

To znaci da:

- kSimpozijum ne moze da se instancira (zato sto sadrzi cistu virtuelnu funkciju) i onda ce samo nasledjena klasa koja overrideuje fUcesce moci da se instancira
- fUcesce ne bi trebalo da implementiras u kSimpozijum, samo ako ima neku zajednicku funkcionalnost sa izvedenom klasom koja opciono moze da pozove fUcesce koja je implementirana u kSimpozijum tako da u kSimpozijum ostavljas:

virtual float fUcesce(float tPrevoz, float tSmestaj) = 0;

- izvedena klasa MORA da override-uje (implementira virtuelnu funkciju) fUcesce tako da bi u iStrucniRad trebao da imas kompletno implementiranu funkciju fUcesce koja moze ali i ne mora da ima kljucnu rec virtual ispred deklaracije funkcije.

tako da do sada imamo:

Code:

class kSimpozijum 
{
    ....

    virtual float fUcesce(float tPrevoz, float tSmestaj) = 0; 

    ....
};

class iStrucniRad:public kSimpozijum, public kUcesnik 
{

    ....

    virtual float fUcesce(float tPrevoz, float tSmestaj)    // rec virtual je opciona ali je dobro da se stavi da se dokumentuje
    {
          // aktuelna implementacija
    }



Mozda si imao nameru da simpozijum takodje moze da se instancira i kao sama klasa za sebe da izracuna ucesce. Onda bi samo trebalo da stavis

virtual float fUcesce(...) // vise nije pure ili ti cista ( nema '= 0' )
{
// implementacija ucesca samog simpozijuma
}

// kasnije u iStrucni rad isto mozes da reimplementiras fUcesce tako da se fUcesce poziva u zavisnosti koji si objekat instancirao

To zavisi od toga da li ima smisla u tvojoj aplikaciji da simpozijum postoji kao objekat sam za sebe.

Mali offtopic:
Nisam siguran da li je ovde uopste potrebno visestruko nasledjivanje, opet, ne shvatam do detalja kako radi sistem koji modeliras ali bi mozda mogao da izbegnes visestruko nasledjivanje tako sto ces koristiti kompoziciju tako da bi klasa iStrucniRad mogla da sadrzi objekte kUcesnik i kSimpozijum umesto da komplikujes visestrukim nasledjivanjem.



EOF
 
Odgovor na temu

[es] :: C/C++ programiranje :: pomoc, c++, apstraktne klase, visestruko nasledjivanje, pokazivaci

[ Pregleda: 1763 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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